事件 API

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

以下事件是内置的:

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

    • "dispatcher": 正在编译的调度程序对象。

    • "args": 参数类型。

    • "return_type": 返回类型。

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

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

  • 当编译器通行(pass)正在运行时,会广播 "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)

一个事件。

参数
kindstr
statusEventStatus
dataany; optional

事件的附加数据。

exc_details3-tuple; optional

__exit__ 相同的 3 元组。

property data

事件数据

返回
resobject
property is_end

这是一个 END 事件吗?

返回
resbool
property is_failed

事件是否携带着异常?

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

返回
resbool
property is_start

这是一个 START 事件吗?

返回
resbool
property kind

事件类型

返回
resstr
property status

事件状态

返回
resEventStatus
class numba.core.event.EventStatus(value)

事件的状态。

class numba.core.event.Listener

所有事件监听器的基类。

notify(event)

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

参数
eventEvent
abstract on_end(event)

当有 END 事件时调用。

参数
eventEvent
abstract on_start(event)

当有 START 事件时调用。

参数
eventEvent
class numba.core.event.RecordingListener

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

on_end(event)

当有 END 事件时调用。

参数
eventEvent
on_start(event)

当有 START 事件时调用。

参数
eventEvent
class numba.core.event.TimingListener

一个监听器,它在此监听器活跃期间测量 STARTEND 事件之间花费的总时间。

property done

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

当此方法返回 False 时,表示匹配事件从未触发。当且仅当此方法返回 True 时,才能无错误地读取 .duration

property duration

返回测量的持续时间。

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

on_end(event)

当有 END 事件时调用。

参数
eventEvent
on_start(event)

当有 START 事件时调用。

参数
eventEvent
numba.core.event.broadcast(event)

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

参数
eventEvent
numba.core.event.end_event(kind, data=None, exc_details=None)

触发 kind 类型事件的结束,带 exc_details

参数
kindstr

事件类型。

dataany; optional

额外事件数据。

exc_details3-tuple; optional

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

numba.core.event.install_listener(kind, listener)

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

返回
resListener

提供的 listener

示例

>>> 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 来测量事件的持续时间。

如果上下文成功完成,将执行 callback 函数。callback 函数应接受一个浮点参数,表示以秒为单位的持续时间。

返回
resTimingListener

示例

这等同于

>>> with install_listener(kind, TimingListener()) as res:
>>>    ...
numba.core.event.register(kind, listener)

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

参数
kindstr
listenerListener
numba.core.event.start_event(kind, data=None)

触发 kind 类型事件的开始,带 data

参数
kindstr

事件类型。

dataany; optional

额外事件数据。

numba.core.event.trigger_event(kind, data=None)

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

参数
kindstr

事件类型。

dataany; optional

额外事件数据。

numba.core.event.unregister(kind, listener)

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

参数
kindstr
listenerListener