Python 3.x 异步生产中的合作产出

Python 3.x 异步生产中的合作产出,python-3.x,python-3.5,python-asyncio,Python 3.x,Python 3.5,Python Asyncio,我正在(tornado)Web服务器上运行一个长时间的CPU密集型任务。我不想把这个任务转移到一个线程上(现在)。在这个长时间运行的任务中,如何正确地将控制“屈服”到eventloop,以便web请求仍然得到服务(注意:我在这里使用的“屈服”是协作调度意义上的屈服,而不是生成器意义上的屈服,或者python关键字yield) 我的建议是做一个等待asyncio.sleep(0),但是有没有保证这不仅仅是作为NOP实现的?我一直在asyncio库中寻找一个专用函数来实现这一点,但到目前为止还没有找

我正在(tornado)Web服务器上运行一个长时间的CPU密集型任务。我不想把这个任务转移到一个线程上(现在)。在这个长时间运行的任务中,如何正确地将控制“屈服”到eventloop,以便web请求仍然得到服务(注意:我在这里使用的“屈服”是协作调度意义上的屈服,而不是生成器意义上的屈服,或者python关键字
yield

我的建议是做一个
等待asyncio.sleep(0)
,但是有没有保证这不仅仅是作为NOP实现的?我一直在asyncio库中寻找一个专用函数来实现这一点,但到目前为止还没有找到

示例(python 3.5异步/等待样式):


文档中没有提到它,但目前,
asyncio.sleep(0)
是实现这一点的常用方法。你可以阅读完整的讨论。而且
asyncio.sleep(0)
是专门做这项工作的。既然是这样,我想你可能不会害怕行为。

太好了!链接到我想要的确切讨论。只要BDFL说这是解决问题的方法,我很高兴:)。
async def long_task():
    for i in range(LARGE_NUMBER):
        do_something(i)
        if i % 100 == 0:
            await asyncio.sleep(0)