Pythonのyield
とFuture
について解説します。
Pythonのyieldとは?
Pythonの yield
は、ジェネレータ関数を定義する際に使用されるキーワードです。ジェネレータ関数は、イテレータを返す特殊な関数です。以下に、 yield
を使用したジェネレータ関数の例を示します:
def count_up_to(n):
i = 1
while i <= n:
yield i
i += 1
この関数はイテレータを返し、それを使って一度に1つずつ値を生成します。
PythonのFutureとは?
Pythonで時間のかかる計算を実行して、その結果を得たいと思った時、通常はその処理を関数にまとめ、その関数を実行した時の返り値として得ることになります。これを同期処理といいます。
一方、同期処理とは異なる概念として非同期処理というものがあります。これは、 Future
というオブジェクトを介して、計算を要求する処理 (receiver)と実際の計算を行う処理 (sender)の間で以下のようなやり取りを行います:
- (receiver)
Future
オブジェクトを生成する。 - (receiver) 何らかの手段を用いて receiver を実行する。
- (sender) 時間のかかる計算を行い、計算結果を、receiver が生成した
Future
オブジェクトに書き込む - (receiver)
Future
オブジェクトを確認し、計算結果が格納されていれば計算結果を取得する。
以下に、 Future
を使用したコードの例を示します:
import asyncio
import time
def f(future):
time.sleep(5) # 時間のかかる処理
future.set_result("hello")
return
future = asyncio.futures.Future()
f(future)
if future.done():
res = future.result()
print(res)
このコードを実行すると、5秒待った後に「hello」と表示されます。
まとめ
Pythonの yield
と Future
は、大規模なデータを扱う際や、リアルタイムでデータを処理する必要がある場合に、とても有効です。これらの概念を理解し、適切に活用することで、より効率的なコードを書くことができます。