非同期システムの作り方

⏺ 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