事件 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)
注册监听特定事件的回调,其中 listener
是 Listener
的一个实例,它定义了特定事件发生时的自定义操作。
- 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
一个监听器,它在此监听器活跃期间测量 START 和 END 事件之间花费的总时间。
- 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)
一个上下文管理器,用于触发带 data 的 kind 类型事件的开始和结束。进入上下文时触发开始事件。退出上下文时触发结束事件。
- 参数
- kindstr
事件类型。
- dataany; optional
额外事件数据。
- numba.core.event.unregister(kind, listener)
为给定的事件类型注销一个监听器。
- 参数
- kindstr
- listenerListener