是否可以获得给定 Flask 应用程序(添加了任何其他软件包)可能发送的所有信号的列表?(即,因此可以订阅?)
还是 Flask 应用程序 / Flask 框架在发送信号之前不知道?
假设所有包在导入时都会创建它们的信号(并假设您已经导入了所有您关心的包),您应该能够通过迭代它来内省通过 blinker.signal 创建的所有命名信号。 blinker.signal
是 的子类weakref.WeakValueDictionary
,因此您可以简单地调用keys
它来获取信号的所有名称:
from blinker import signal
# import everything else here
print sorted(signal.keys())
请参阅:blinker.base
了解更多信息。
先前接受的答案(由 Sean Vieira)不适用于 Python 3 上最新版本的 Blinker (1.4)。
要获得所有可用的信号(在 1.4 和 1.3 上经过验证),您应该
from blinker import signal
all_signals = signal.__self__.keys()