【问题标题】:How to make python await for "nothing", running the event loop first如何让python等待“无”,首先运行事件循环
【发布时间】:2019-08-04 19:17:49
【问题描述】:

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

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

这些是数以千计的小型数据库调用,如果需要,我可以在这些调用之间使异步事件循环“运行”。在这种情况下,我怎样才能让 python "await for nothing"?

类似的 hack 是在 JavaScript 中等待已解析的 Promise,这会将进程返回事件循环,首先解决更紧迫的事件。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-04-28
      • 2020-11-11
      • 2018-02-20
      • 1970-01-01
      • 1970-01-01
      • 2023-01-20
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多