事件 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)
注册回调,这些回调监听特定事件,其中 listener
是 Listener
的一个实例,定义了在特定事件发生时执行的自定义操作。
- 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.RecordingListener[源代码]
一个记录所有事件并将它们存储在
.buffer
属性中的监听器,作为 2-tuple(float, Event)
的列表,其中第一个元素是事件发生的时间,由time.time()
返回,第二个元素是事件。
- class numba.core.event.TimingListener[源代码]
一个监听器,用于测量在此监听器活动期间,START 和 END 事件之间所花费的总时间。
- property done
返回一个
bool
,指示是否已进行测量。当此返回
False
时,匹配的事件从未触发。当且仅当此返回True
时,可以无误地读取.duration
。
- property duration
返回测量的持续时间。
这可能会引发
AttributeError
。用户可以使用.done
来检查是否已经进行了测量。
- 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.start_event(kind, data=None)[源代码]
触发一个带有 数据 的 类型 事件的开始。
- 参数:
- 种类str
事件类型。
- 数据任意; 可选
额外的事件数据。