我正在尝试用python实现一个实时网络摄像头服务,所以我希望使用aiortc。看看GitHub page上的例子,我发现了一个奇怪的东西,我不明白它是如何工作的
在examples文件夹的server/server.py
上,有一个带有decorator的async
函数。该函数从未被调用,因此我无法理解装饰器是如何工作的
pc = RTCPeerConnection()
.......
@pc.on("iceconnectionstatechange")
async def on_iceconnectionstatechange():
log_info("ICE connection state is %s", pc.iceConnectionState)
if pc.iceConnectionState == "failed":
await pc.close()
pcs.discard(pc)
在这种情况下,永远不会调用函数on_iceconnectionstatechange
。以哪种方式调用@pc.on
装饰器
RTCPeerConnection
从AsyncIOEventEmitter
(link)从^{pyee
是一个事件系统模块。这个AsyncIOEventEmitter
类是on
decorator方法的来源从不直接调用
on_iceconnectionstatechange
函数,但装饰程序将其注册为事件侦听器,因此每当该事件被执行时,都会调用它,例如here由于装饰器的工作方式,问题中的代码片段大致相当于:
以下是
decorator
(来自here)的“定义”片段:这里,
event
的值是"iceconnectionstatechange"
,因此代码相当于:因为调用了
decorator
函数,所以它可以在一些内部字典中注册on_iceconnectionstatechange
,以便在发出相关事件时调用它。decorator注册事件侦听器而不直接调用on_iceconnectionstatechange
,因为它在创建时注册,而不是等待调用相关问题 更多 >
编程相关推荐