Pythonの非同期処理について理解するためには、まずasync
とawait
の概念を理解することが重要です。
asyncとawaitの基本
Pythonで時間のかかる計算を実行し、その結果を得たいと思った時、通常はその処理を関数にまとめ、その関数を実行した時の返り値として得ることになります。これを同期処理といいます。
一方、同期処理とは異なる概念として非同期処理というものがあります。これは、Future
というオブジェクトを介して、計算を要求する処理 (receiver)と実際の計算を行う処理 (sender)の間で以下のようなやり取りを行います。
- (receiver)
Future
オブジェクトを生成する。 - (receiver) 何らかの手段を用いてreceiverを実行する。
- (sender) 時間のかかる計算を行い、計算結果を、receiverが生成した
Future
オブジェクトに書き込む.
asyncとawaitの使用例
以下に、非同期処理の一例を示します。
import asyncio
import time
def f(future):
time.sleep(5) # 時間のかかる処理
future.set_result("hello")
loop = asyncio.get_event_loop()
future = asyncio.futures.Future()
loop.call_soon(f, future)
res = loop.run_until_complete(future)
print(res)
このコードを実行すると、5秒待った後に「hello」と表示されます。
まとめ
Pythonの非同期処理は、async
とawait
を理解することで、より効率的なプログラムを書くことが可能になります。これらのキーワードを使いこなすことで、Pythonのパワフルな非同期処理の世界を体験することができます。