如何让python等待“无”,首先运行事件循环
Posted
技术标签:
【中文标题】如何让python等待“无”,首先运行事件循环【英文标题】:How to make python await for "nothing", running the event loop first 【发布时间】:2019-08-04 19:17:49 【问题描述】:我运行一个由网络事件运行的 python 程序,并且不能在不处理心跳的情况下运行 10-15 秒。 (更具体地说,我使用 discord.py 处理大量事件)
在一种可能的情况下,我可以让命令将大量数据存储到数据库中,这可能会占用超过 10 到 15 秒的时间,并且会阻塞。
这些是数以千计的小型数据库调用,如果需要,我可以在这些调用之间使异步事件循环“运行”。在这种情况下,我怎样才能让 python "await
for nothing"?
类似的 hack 是在 javascript 中等待已解析的 Promise
,这会将进程返回事件循环,首先解决更紧迫的事件。
【问题讨论】:
【参考方案1】:await asyncio.sleep(0)
- is a way 将控制权返回给事件循环。
尽管您可以采用另一种方式,而不是不断地调用它:使用run_in_executor
运行您的阻塞代码in another thread 并等待它完成。这样,事件循环通常会在阻塞后台线程中正在处理的内容时继续其进程。
【讨论】:
以上是关于如何让python等待“无”,首先运行事件循环的主要内容,如果未能解决你的问题,请参考以下文章