如何让python等待“什么都没有”,首先运行事件循环

时间:2019-08-04 19:17:49

标签: python python-3.x async-await python-asyncio

我运行了一个由网络事件运行的python程序,如果不处理心跳信号就不能运行10-15秒。 (更具体地说,我将discord.py用于大量事件)

在一种可能的情况下,我可以让一个命令将大量数据存储到数据库中,这可能会花费超过10到15秒的时间,并且会阻塞。

这些是成千上万个小型数据库调用,如果需要,我可以在这些调用之间进行异步事件循环的“运行”。在这种情况下,如何使python“ await一无所有”?

一个类似的破解方法是等待JavaScript中已解决的Promise,这将使流程重新回到事件循环中,首先解决更多紧迫的事件。

1 个答案:

答案 0 :(得分:2)

await asyncio.sleep(0)-is a way,将控制权返回到事件循环。

尽管可以不断地调用它,而不是不断地调用它:使用run_in_executor运行阻塞代码in another thread并等待其完成。这样,事件循环通常会继续进行,同时阻止在后台线程中处理内容。