当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python matplotlib CallbackRegistry用法及代码示例


本文简要介绍 python 语言中 matplotlib.cbook.CallbackRegistry 的用法。

用法

class matplotlib.cbook.CallbackRegistry(exception_handler=<function _exception_printer>, *, signals=None)

基础: object

处理一组信号和回调的注册、处理、阻塞和断开连接:

>>> def oneat(x):
...     print('eat', x)
>>> def ondrink(x):
...     print('drink', x)
>>> from matplotlib.cbook import CallbackRegistry
>>> callbacks = CallbackRegistry()
>>> id_eat = callbacks.connect('eat', oneat)
>>> id_drink = callbacks.connect('drink', ondrink)
>>> callbacks.process('drink', 123)
drink 123
>>> callbacks.process('eat', 456)
eat 456
>>> callbacks.process('be merry', 456)   # nothing will be called
>>> callbacks.disconnect(id_eat)
>>> callbacks.process('eat', 456)        # nothing will be called
>>> with callbacks.blocked(signal='drink'):
...     callbacks.process('drink', 123)  # nothing will be called
>>> callbacks.process('drink', 123)
drink 123

在实践中,当不再需要所有回调时,应始终断开所有回调,以避免悬空引用(从而导致内存泄漏)。然而,Matplotlib 中的实际代码很少这样做,并且由于其设计,放置这种代码相当困难。为了解决这个问题,并防止此类内存泄漏,我们只存储对绑定方法的弱引用,因此当目标对象需要死亡时,CallbackRegistry 不会使其保持活动状态。

参数
exception_handler 可调用的,可选的

如果不是 None,则 exception_handler 必须是采用 Exception 作为单个参数的函数。它会被 CallbackRegistry.process 期间回调引发的任何 Exception 调用,并且可能会重新引发异常或以其他方式处理它。

如果交互式事件循环正在运行,则默认处理程序会打印异常(使用 traceback.print_exc );如果没有交互式事件循环正在运行,它会重新引发异常。

signals 列表,可选

如果不是 None,则 signals 是此注册表处理的信号列表:尝试对不在列表中的信号执行 processconnect 会引发 ValueError 。默认值“无”,不限制处理的信号。

相关用法


注:本文由纯净天空筛选整理自skytowner.com大神的英文原创作品 matplotlib.cbook.CallbackRegistry。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。