【发布时间】:2022-01-06 01:21:46
【问题描述】:
我注意到 on_message 事件处理程序一次只能处理 1 条消息。
所以当我们需要在其中处理一些耗时的任务时,它实际上会阻止机器人处理稍后进来的消息。
在下面的示例中,如果用户快速连续发送两条或多条消息,机器人将拾取第一条消息并开始处理它,但它不会处理第二条消息,直到它完成第一条消息并且将结果发回,在这种情况下,说执行该 get_result_from_time_sumption_task 函数需要几分钟。它实际上会在执行此操作时阻止所有传入消息。
我试图实现多线程来处理耗时的任务,但是在玩了之后,我无法让消息发送与它一起工作。
@client.event
async def on_message(message):
result = get_result_from_time_consuming_task()
sent_message = await message.channel.send(result)
【问题讨论】:
-
通过适当的异步代码,
on_message将能够同时处理多条消息。get_result_from_time_consuming_task()很可能是阻塞的,您将把它重写为异步的。如果你不能将它重写为异步,那么你可以把它放在一个线程中。参见示例here。
标签: python discord.py