\

PythonのyieldFutureについて解説します。

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)の間で以下のようなやり取りを行います:

  1. (receiver) Future オブジェクトを生成する。
  2. (receiver) 何らかの手段を用いて receiver を実行する。
  3. (sender) 時間のかかる計算を行い、計算結果を、receiver が生成した Future オブジェクトに書き込む
  4. (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の yieldFuture は、大規模なデータを扱う際や、リアルタイムでデータを処理する必要がある場合に、とても有効です。これらの概念を理解し、適切に活用することで、より効率的なコードを書くことができます。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です