我有这个功能:
async def on_event(event: dict):
for func in MESSAGE_LISTENERS:
await func(getMessage(event['data']))
这个装饰器将函数附加到
MESSAGE_LISTENERS
:
def on_message(func: callable):
MESSAGE_LISTENERS.append(func)
return func
这是当从服务器收到消息时运行函数
on_event
的代码:
async def run(self):
async with websockets.connect(WS_URL, max_size=None) as ws:
await self.__on_open(ws)
while True:
event = json.loads(await ws.recv())
await on_event(event)
这是用法:
client = Client()
@on_message
async def onMessage(msg: Message):
while True:
print(f"Message '{msg.content}' was sent by the server")
await asyncio.sleep(3)
asyncio.run(client.run())
现在,如果从服务器收到消息,我希望机器人每 3 秒打印一次消息,但是在收到第一条消息后,整个实例会冻结并且不会侦听/检测新消息。
我尝试过:
async def on_event(event: dict):
for func in MESSAGE_LISTENERS:
asyncio.create_task(func(getMessage(event['data'])))
但它仍然冻结。
我用了await on_event(event) 并使用await,导致代码等待,直到on_event返回一个值,它永远不会返回值soo
替换 await on_event(event) 与 on_event(事件)