我在twbotlib(https://github.com/truedl/twbotlib)库中加入了异步代码异步处理。
我在某些版本上尝试了异步命令,并且一切正常,但是我没有检查是否真的是异步的。然后,我尝试创建一个赠品命令并使用await asyncio.sleep(5)
。我意识到这会阻止我所有其他代码...
经过多次尝试使用asyncio代码后,我看不到结果正在运行且没有阻塞...
(main.py中的我的Bot类具有一个名为self.loop的属性,实际上是asyncio.get_event_loop)
我不知道我是否能正确完成所有操作,因为在调用Run函数之后,我会使用await调用所有以后的操作。
我尝试用 等待self.loop.create_task(foo)。 我试着做 等待self.loop.ensure_future(foo)但什么都没有...
我也试图将代码拆分为两个函数(mainloop和check_data)。
代码中首先是Run函数,在这里我开始循环(只需创建task和run_forever):
def run(self, startup_function=None) -> None:
""" Run the bot and start the main while. """
self.loop.create_task(self.mainloop(startup_function))
self.loop.run_forever()
第二个是mainloop函数(所有的await函数都在阻塞...):
async def mainloop(self, startup_function) -> None:
""" The main loop that reads and process the incoming data. """
if startup_function:
await startup_function()
self.is_running = True
while self.is_running:
data = self.sock.recv(self.buffer).decode('utf-8').split('\n')
await self.check_data(data)
最后一个是check_data(已拆分的主循环[为了可读性,我已将long if替换为“ condition”,在这里等待也阻塞了):
async def check_data(self, data: str) -> None:
for line in data:
if confition:
message = self.get_message_object_from_str(line)
if condition:
if condition:
await self.commands[message.command](message, message.args)
else:
await self.commands[message.command](message)
elif hasattr(self.event, 'on_message'):
await self.event.on_message(message)
if self.logs:
print(line)
没有错误信息。 该代码正在阻止,我正尝试对其进行更改以不阻止该代码。
答案 0 :(得分:0)
循环for line in data:
阻止了您的代码。