事件 API

numba.core.event 模块为应用程序提供了一个简单的事件系统,用于注册回调以监听特定的编译器事件。

以下事件是内置的:

  • "numba:compile" 在调度器编译时广播。此类事件的 data 定义为一个包含以下键值对的 dict

    • "dispatcher": 正在编译的分发器对象。

    • "args": 参数类型。

    • "return_type": 返回类型。

  • "numba:compiler_lock" 在获取内部编译器锁时广播。这主要用于内部测量获取锁所花费的时间。

  • "numba:llvm_lock" 在获取内部 LLVM 锁时广播。这用于内部测量获取锁所花费的时间。

  • "numba:run_pass" 在编译器传递运行时广播。

    • "name": 传递名称。

    • "qualname": 被编译函数的限定名称。

    • "module": 正在编译的函数的模块名称。

    • "flags": 编译标志。

    • "args": 参数类型。

    • "return_type" 返回类型。

应用程序可以使用 register(kind: str, listener: Listener) 注册回调,这些回调监听特定事件,其中 listenerListener 的一个实例,定义了在特定事件发生时执行的自定义操作。

class numba.core.event.Event(kind, status, data=None, exc_details=None)[源代码]

一个事件。

参数:
种类str
状态事件状态
数据任意; 可选

事件的附加数据。

exc_details3-元组;可选

__exit__ 使用相同的 3-元组。

property data

事件数据

返回:
res对象
property is_end

这是一个 END 事件吗?

返回:
res布尔
property is_failed

事件是否携带异常?

这用于 END 事件。此方法在 START 事件中永远不会返回 True

返回:
res布尔
property is_start

这是一个 START 事件吗?

返回:
res布尔
property kind

事件种类

返回:
resstr
property status

事件状态

返回:
res事件状态
class numba.core.event.EventStatus(value, names=None, *, module=None, qualname=None, type=None, start=1, boundary=None)[源代码]

事件的状态。

class numba.core.event.Listener[源代码]

所有事件监听器的基类。

notify(event)[源代码]

使用给定的事件通知此监听器。

参数:
事件事件
abstract on_end(event)[源代码]

当有 END 事件时调用。

参数:
事件事件
abstract on_start(event)[源代码]

在发生 START 事件时调用。

参数:
事件事件
class numba.core.event.RecordingListener[源代码]

一个记录所有事件并将它们存储在 .buffer 属性中的监听器,作为 2-tuple (float, Event) 的列表,其中第一个元素是事件发生的时间,由 time.time() 返回,第二个元素是事件。

on_end(event)[源代码]

当有 END 事件时调用。

参数:
事件事件
on_start(event)[源代码]

在发生 START 事件时调用。

参数:
事件事件
class numba.core.event.TimingListener[源代码]

一个监听器,用于测量在此监听器活动期间,STARTEND 事件之间所花费的总时间。

property done

返回一个 bool ,指示是否已进行测量。

当此返回 False 时,匹配的事件从未触发。当且仅当此返回 True 时,可以无误地读取 .duration

property duration

返回测量的持续时间。

这可能会引发 AttributeError 。用户可以使用 .done 来检查是否已经进行了测量。

on_end(event)[源代码]

当有 END 事件时调用。

参数:
事件事件
on_start(event)[源代码]

在发生 START 事件时调用。

参数:
事件事件
numba.core.event.broadcast(event)[源代码]

向所有已注册的监听器广播事件。

参数:
事件事件
numba.core.event.end_event(kind, data=None, exc_details=None)[源代码]

触发 kind 事件的结束,exc_details

参数:
种类str

事件类型。

数据任意; 可选

额外的事件数据。

exc_details3-元组;可选

__exit__ 的相同 3-元组。或者,如果没有错误则为 None

numba.core.event.install_listener(kind, listener)[源代码]

在上下文持续期间,临时安装一个监听“kind”事件的监听器。

返回:
res监听器

提供的 监听器

示例

>>> with install_listener("numba:compile", listener):
>>>     some_code()  # listener will be active here.
>>> other_code()     # listener will be unregistered by this point.
numba.core.event.install_recorder(kind)[源代码]

临时安装一个 RecordingListener 以记录所有事件。

一旦上下文关闭,用户可以使用 RecordingListener.buffer 来访问记录的事件。

返回:
resRecordingListener

示例

这相当于:

>>> with install_listener(kind, RecordingListener()) as res:
>>>    ...
numba.core.event.install_timer(kind, callback)[源代码]

临时安装一个 TimingListener 来测量事件的持续时间。

如果上下文成功完成,则执行 回调 函数。预期 回调 函数接受一个浮点数参数,表示持续时间(以秒为单位)。

返回:
resTimingListener

示例

这相当于:

>>> with install_listener(kind, TimingListener()) as res:
>>>    ...
numba.core.event.register(kind, listener)[源代码]

为给定的事件类型注册一个监听器。

参数:
种类str
监听器监听器
numba.core.event.start_event(kind, data=None)[源代码]

触发一个带有 数据类型 事件的开始。

参数:
种类str

事件类型。

数据任意; 可选

额外的事件数据。

numba.core.event.trigger_event(kind, data=None)[源代码]

一个上下文管理器,用于触发带有 datakind 的开始和结束事件。进入上下文时触发开始事件。退出上下文时触发结束事件。

参数:
种类str

事件类型。

数据任意; 可选

额外的事件数据。

numba.core.event.unregister(kind, listener)[源代码]

取消注册给定事件类型的监听器。

参数:
种类str
监听器监听器