1
我在(龍捲風)網絡服務器上運行一個耗時較長的CPU密集型任務。我不想將這個任務卸載到一個線程(現在)。我如何在這個長時間運行的任務中正確地「控制」控制權給事件響應,以便Web請求仍然在服務中(注意:我在協作調度的意義上使用「yield」,而不是生成器意義上的,或python關鍵字yield
)。asyncio中的合作收益
我的建議是做一個await asyncio.sleep(0)
,但是有沒有保證這不僅僅是作爲NOP實現的?我一直在asyncio庫中尋找專門的功能來做到這一點,但到目前爲止一直沒有找到。
示例(Python 3.5異步/等待風格):
async def long_task():
for i in range(LARGE_NUMBER):
do_something(i)
if i % 100 == 0:
await asyncio.sleep(0)
完美!鏈接到我正在尋找的確切討論。只要BDFL說這是做到這一點的方法,我很高興:)。 – Claude