ホームページ >バックエンド開発 >Python チュートリアル >Python で multiprocessing.Process インスタンスから戻り値を取得するにはどうすればよいですか?

Python で multiprocessing.Process インスタンスから戻り値を取得するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-28 11:48:12615ブラウズ

How Can I Retrieve Return Values from multiprocessing.Process Instances in Python?

Multiprocessing.Process インスタンスの関数から戻り値を抽出する

multiprocessing.Process に渡された関数から戻り値を取得する機能は、特に非同期タスクの実行が必要な場合に便利な機能です。残念ながら、値には Process オブジェクトからすぐにアクセスできないため、別のアプローチが必要です。

値のストレージについて

従来の Python 関数とは異なり、これらの関数は multiprocessing.Process に渡されます。戻り値属性はありません。代わりに、値は別の場所、具体的には共有メモリ オブジェクトに保存されます。これは、マルチプロセッシングを使用して作成されたプロセスが別のメモリ空間で実行され、メイン プロセスの変数に直接アクセスできないためです。

通信に共有変数を使用する

戻り値を返すには、プロセス間の通信形式を確立する必要があります。効果的な方法の 1 つは、共有変数を利用することです。これらは、複数のプロセスが同時にデータを共有し、アクセスできるようにするオブジェクトです。この例では、multiprocessing.Manager() を使用してマネージャー オブジェクトと共有辞書を作成します。ディクショナリは共有変数として機能します。

戻り値へのアクセス

ワーカー関数内で、共有ディクショナリに必要な戻り値を設定します。メインプロセスは、すべてのタスクが完了するのを待った後、共有辞書にアクセスしてこれらの値を取得できます。この戦略を採用することで、マルチプロセスのアプローチを損なうことなく戻り値を効率的に抽出できます。

実装例

次の例は、戻り値を取得するための共有変数の実装を示しています。値:

import multiprocessing

def worker(procnum, return_dict):
    """worker function"""
    print(str(procnum) + " represent!")
    return_dict[procnum] = procnum

if __name__ == "__main__":
    manager = multiprocessing.Manager()
    return_dict = manager.dict()
    jobs = []
    for i in range(5):
        p = multiprocessing.Process(target=worker, args=(i, return_dict))
        jobs.append(p)
        p.start()

    for proc in jobs:
        proc.join()
    print(return_dict.values())

出力:

0 represent!
1 represent!
3 represent!
2 represent!
4 represent!
[0, 1, 3, 2, 4]

このアプローチにより、ワーカー関数の戻り値を取得し、ワーカー関数のプロセス間のシームレスな通信を実証できます。マルチプロセッシング フレームワーク。

以上がPython で multiprocessing.Process インスタンスから戻り値を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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