私の連絡先情報
郵便メール:
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
コルーチンは、プログラムへの複数のエントリ ポイントを使用して、特定の場所で実行を一時停止および再開できるようにするプログラム コンポーネントです。スレッドやプロセスとは異なり、コルーチンの切り替えは、オペレーティング システムによってスケジュールされるのではなく、プログラマによって明示的に制御されます。これにより、実行環境全体 (スレッド スタックなど) を保存および復元する必要がなくなるため、コンテキストの切り替えを実行するときにコルーチンがより軽量になります。
Pythonでは主にコルーチンが渡しますasync
そしてawait
達成すべきキーワード。これらのキーワードを使用して定義された関数は「コルーチン関数」と呼ばれ、呼び出されてもすぐには実行されず、代わりにコルーチン オブジェクトを返します。このコルーチン オブジェクトは、イベント ループで実行されるようにスケジュールする必要があります。
非同期プログラミングは、特定の長時間実行操作 (I/O 操作など) が完了するのを待ちながら、プログラムが他のタスクの実行を継続できるようにする同時実行モデルです。 Python では、非同期プログラミングはコルーチンでよく使用され、その実行はイベント ループを通じてスケジュールされます。
async
そしてawait
async def
コルーチン関数を定義します。await
別のコルーチンまたは非同期操作が完了するまで待機します。asyncio
ライブラリはイベント ループの実装を提供します。非同期コードが何らかのイベント ループで実行されることを確認する必要があります。asyncio.run(main())
メインのコルーチン関数を実行すると、イベント ループが自動的に作成および管理されます。python复制代码
import asyncio | |
# 定义一个异步函数,模拟一个耗时的I/O操作 | |
async def fetch_data(url): | |
print(f"Fetching {url}...") | |
# 模拟耗时操作 | |
await asyncio.sleep(1) | |
return f"Data from {url}" | |
async def main(): | |
# 同时启动多个异步任务 | |
task1 = asyncio.create_task(fetch_data('http://example.com/data1')) | |
task2 = asyncio.create_task(fetch_data('http://example.com/data2')) | |
# 等待所有任务完成 | |
result1, result2 = await asyncio.gather(task1, task2) | |
print(result1) | |
print(result2) | |
# 运行主协程 | |
asyncio.run(main()) |
この例では、fetch_data
ネットワークリクエストをシミュレートする非同期関数です。main
関数では 2 つを同時に開始しましたfetch_data
非同期タスクと使用await asyncio.gather()
同時に終了するまで待ちます。
asyncio
これは Python 標準ライブラリの一部であり、コルーチンと非同期プログラミングをサポートするために使用されます。などの豊富なAPIも提供します。asyncio.Queue
、asyncio.Lock
非同期コードでの同時実行性と同期の問題を処理するためなど。