【问题标题】:Cooperative yield in asyncioasyncio 中的合作收益
【发布时间】:2016-08-07 11:11:55
【问题描述】:

我正在(龙卷风)网络服务器上运行一个长时间的 CPU 密集型任务。我不想将此任务卸载到线程(现在)。我如何在这个长时间运行的任务期间正确地“让出”控制到事件循环,以便仍然提供 Web 请求(注意:我在这里使用“让出”的协作调度意义,而不是生成器意义, 或 python 关键字yield)。

我的建议是做一个await asyncio.sleep(0),但是可以保证这不只是作为一个NOP实现的吗?我一直在寻找 asyncio 库中的专用函数来执行此操作,但到目前为止一直找不到。

示例(python 3.5 async/await 风格):

async def long_task():
    for i in range(LARGE_NUMBER):
        do_something(i)
        if i % 100 == 0:
            await asyncio.sleep(0)

【问题讨论】:

    标签: python-3.x python-3.5 python-asyncio


    【解决方案1】:

    文档中没有提到,但目前asyncio.sleep(0) 是执行此操作的常用方法。你可以阅读完整的讨论here。而且asyncio.sleep(0)是专门optimized做的。既然has test这个案子,我想你可能不怕行为了。

    【讨论】:

    • 完美!链接到我正在寻找的确切讨论。只要 BDFL 说这是这样做的方法,我就很高兴:)。
    猜你喜欢
    • 2015-11-15
    • 2019-09-19
    • 2015-01-28
    • 2013-07-03
    • 2014-08-29
    • 1970-01-01
    • 2021-08-23
    • 2019-03-22
    • 1970-01-01
    相关资源
    最近更新 更多