非同期システムの作り方
⏺ awaitは「I/O待ちの間だけ」他に譲る
I/Oバウンド処理の場合(うまく機能する)
async def fetch_data():
response = await http_client.get(url) # ネットワーク待ち
return response
時間軸 ──────────────────────────────────────────►
タスクA: [処理]──await──[待機中...]──[再開]
タスクB: [処理]──await──[待機中...]──[再開]
タスクC: [処理]──await──[待機中...]
↑ awaitでI/O待ちの間、他のタスクが動ける
awaitの意味: 「I/O完了まで待つ間、他のタスクどうぞ」
CPUバウンド処理の場合(問題発生)
async def generate_png():
image = await convert_pdf_to_image(pdf) # ← CPU処理が重い
return image