ホームページ >バックエンド開発 >Python チュートリアル >Python マルチプロセッシングではどのプール メソッドを使用する必要がありますか?

Python マルチプロセッシングではどのプール メソッドを使用する必要がありますか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-03 13:58:31828ブラウズ

Which Pool Method Should I Use in Python Multiprocessing?

Multiprocessing.Pool: どのメソッドを使用する必要がありますか?

マルチプロセッシングを使用すると、Python は複数のプロセス間で関数を同時に実行できます。ただし、特に Pool.apply、Pool.apply_async、および Pool.map を考慮する場合、適切なメソッドの選択は混乱する可能性があります。それらの違いと使用例を明確にしましょう:

Pool.apply 対 Pool.apply_async 対 Pool.map

1. Pool.apply:

  • 別のプロセスで関数を呼び出し、関数が戻るまで現在のプロセスをブロックします。
  • 単一の関数呼び出しを実行する必要がある場合に使用し、すぐに結果を待ちます。

2. Pool.apply_async:

  • Pool.apply と同様に、別のプロセスで関数を呼び出しますが、すぐに戻ります。
  • AsyncResult オブジェクトを返します。これにより、
  • 結果が利用可能になったときに呼び出されるコールバック関数をサポートします。
  • 複数の関数呼び出しの非同期処理に役立ちます。

3. Pool.map:

  • 一連の引数に対して同じ関数を並列に呼び出します。
  • すべての結果が取得されるまでブロックします。
  • 順序を保持します引数と結果の説明。
  • 同じ関数を複数のデータ ポイントに適用し、同じ順序で結果のリストを取得する場合に最適です。

正しい方法の選択

次の場合は Pool.apply を使用します。

  • 単一の関数が返されるまでブロックする必要があります。
  • 必要ありません非同期処理を処理します。

次の場合は Pool.apply_async を使用します。

  • 複数の関数を非同期に呼び出し、後でその結果を取得したい場合。
  • コールバックを使用して結果を処理したいと考えています。

次の場合は Pool.map を使用します。

  • 同じものを適用する必要があります。
  • 引数と結果の順序を保持したい場合。

例: Pool.apply_async の非同期コールバック

<code class="python">import multiprocessing as mp
import time

def foo_pool(x):
    time.sleep(2)
    return x*x

result_list = []
def log_result(result):
    result_list.append(result)

def apply_async_with_callback():
    pool = mp.Pool()
    for i in range(10):
        pool.apply_async(foo_pool, args = (i, ), callback = log_result)
    pool.close()
    pool.join()
    print(result_list)

if __name__ == '__main__':
    apply_async_with_callback()</code>

出力:

[1, 0, 4, 9, 25, 16, 49, 36, 81, 64]

Pool.map とは異なり、結果の順序が関数呼び出しの順序と一致しない可能性があることに注意してください。

以上がPython マルチプロセッシングではどのプール メソッドを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。