如何让 python 等待“无”,首先运行事件循环

Sha*_*han 4 python python-3.x async-await python-asyncio

我运行一个由网络事件运行的 python 程序,并且不能在不处理心跳的情况下运行 10-15 秒。(更具体地说,我使用 discord.py 处理大量事件)

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

这些是数千个小型数据库调用,如果需要,我可以在这些调用之间使异步事件循环“运行其进程”。在这种情况下我怎样才能让Python“await无缘无故”呢?

类似的 hack 是等待PromiseJavaScript 中的解决,这会将进程扔回到事件循环中,首先解决更紧迫的事件。

Mik*_*mov 9

await asyncio.sleep(0)-是将控制权返回到事件循环的一种方法。

尽管您不必不断地调用它,但您可以采用另一种方式:在另一个线程中运行您的阻塞代码run_in_executor并等待它完成。这样,事件循环通常会继续其进程,同时阻止后台线程中正在处理的内容。