← トップ
14 / 20

14. 非同期(async/await)

CONCEPT

非同期async(エイシンク)。待ち時間のある処理を効率よく行う仕組みは、「待っている間に別の作業をする」仕組みです。レストランで料理を注文したあと、料理が来るまでスマホを見るのと同じです。AIの応答を待つ間に別の処理を進められます。

📍 使い道: 複数サイトの同時スクレイピングで待ち時間を短縮
COMMON MISTAKES — よくある間違い
await を async 関数の外で使うawait は async def の中でしか使えません。普通の関数の中では使えません。
非同期関数を直接呼び出すasync def func() を func() で呼んでも実行されません。await func() または asyncio.run() が必要です。
コードを1行ずつ実行してみよう
example.pyPython
1async def ask_ai(bot_name, question):# ask_ai関数を定義(async = 非同期関数)。ChatGPTに「天気」を質問する
2 print(f"{bot_name}に質問中...")# "ChatGPTに質問中..." を表示
3 await asyncio.sleep(2)# await asyncio.sleep(2) で2秒待つ。待っている間に別のAIの処理も並行して進む
4 return f"{bot_name}: {question}の回答です"# "ChatGPT: 天気の回答です" を返す
5results = await asyncio.gather(3つのAI)# asyncio.gather() で3つのAIの結果を同時に受け取る。並行実行により合計約2秒で完了
« 次の行 » ボタンを押して実行を開始
VARIABLES
実行すると変数の状態が表示されます
async/awaitは「待っている間に別の作業をする」仕組みです。 レストランで注文してから料理が来るまでスマホを見るのと同じ。 「待ち時間を無駄にしない」ための書き方です。
📚 読み方ガイド
コード読み方
async def ask_ai(...):この関数は非同期async(エイシンク)。待ち時間のある処理を効率よく行う仕組み(待ち時間あり)
await asyncio.sleep(2)ここで結果を待つ(待ってる間に別の作業へ)
asyncio.gather(...)複数の非同期処理を同時に実行する
asyncio.run(main())非同期プログラムを起動する
KEY POINT

async def は「この関数は待ち時間があるよ」という宣言。await は「ここで結果を待つよ」という合図(待っている間に別の処理が進む)。asyncio.gather() で複数の非同期エイシンク — 待ち時間のある処理を効率よく処理を同時に実行できる。

確認問題
1await asyncio.sleep(3) は何を意味しているか
async def check_inventory(item_id): await asyncio.sleep(3) return {"item_id": item_id, "stock": 10}
「ここで3秒間待つ」という意味です。ただし、await があるので待っている間に他の処理(別のチェック等)を進めることができます。sleepが終わったら次の return 文が実行され、results結果(英: results、複数形)が返ります。
2asyncio.gather() のメリットは?
複数の処理を「同時に」実行できることです。例1では、ChatGPT・Claude・Geminiに同時に質問するので、順番に待つ(計6秒)のではなく、並行して待つ(約2秒)で済みます。
3async と await の役割を説明してください
async def notify(user_id, messageメッセージ(英: message)): await send_push_notification(user_id, message) print("通知完了")
非同期async(エイシンク)。待ち時間のある処理を効率よく行う仕組みでは、async は「この関数は非同期(待ち時間がある)」と宣言するキーワード。await は「ここで結果を待つ」という合図で、待っている間に他の処理に切り替えられます。
CHEAT SHEET — まとめ
3行で分かる
  • 待ち時間のある処理を「待っている間に別作業」で効率化
  • async def で非同期関数を定義・await で結果を待つ
  • AI応答や通信の待ち時間を有効活用できる
非同期