私は、(竜巻)ウェブサーバで長い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