當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。