1. ホーム
  2. パイソン

[解決済み] [Solved] multiprocessing.Processに渡された関数の戻り値を復元するにはどうすればよいですか?

2022-04-03 14:53:34

質問

以下のサンプルコードで、関数の戻り値を復元したい。 worker . どうすればいいのでしょうか? この値はどこに保存されていますか?

コード例です。

import multiprocessing

def worker(procnum):
    '''worker function'''
    print str(procnum) + ' represent!'
    return procnum


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

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

出力します。

0 represent!
1 represent!
2 represent!
3 represent!
4 represent!
[<Process(Process-1, stopped)>, <Process(Process-2, stopped)>, <Process(Process-3, stopped)>, <Process(Process-4, stopped)>, <Process(Process-5, stopped)>]

に格納されているオブジェクトの中から、該当する属性が見つからないようです。 jobs .

解決方法は?

使用方法 共有変数 を使用して通信します。例えばこんな感じ。

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())