Pythonでmultiprocessing処理をしている各プロセスの返り値を取得する

Pythonでmultiprocessingを行う際、各プロセスの返り値を取得したいということがあったので備忘として残しておく。
色々と調べてみたところ、以下のようにmultiprocessing.Pipeを使って返り値を配列として取得し、それを後ほど分解するのがよさそうだ。

import multiprocessing

def worker(string, send_rev):
    result = str(string) + '_result'
    send_rev.send(result)

def main():
    job_list = []
    pipe_list = []
    for i in range(10):
        get_rev,send_rev  = multiprocessing.Pipe(False)
        p = multiprocessing.Process(target=worker, args=(i, send_rev))
        job_list.append(p)
        pipe_list.append(get_rev)
        p.start()

    for proc in job_list:
        proc.join()
    result_list = [x.recv() for x in pipe_list]
    print(result_list)

if __name__ == '__main__':
        main()
Sponsored Links

test@test:~$ cat test_multi.py
import multiprocessing

def worker(string, send_rev):
    result = str(string) + '_result'
    send_rev.send(result)

def main():
    job_list = []
    pipe_list = []
    for i in range(10):
        get_rev,send_rev  = multiprocessing.Pipe(False)
        p = multiprocessing.Process(target=worker, args=(i, send_rev))
        job_list.append(p)
        pipe_list.append(get_rev)
        p.start()

    for proc in job_list:
        proc.join()
    result_list = [x.recv() for x in pipe_list]
    print(result_list)

if __name__ == '__main__':
        main()
test@test:~$ python test_multi.py
['0_result', '1_result', '2_result', '3_result', '4_result', '5_result', '6_result', '7_result', '8_result', '9_result']
test@test:~$ python3 test_multi.py
['0_result', '1_result', '2_result', '3_result', '4_result', '5_result', '6_result', '7_result', '8_result', '9_result']

 


Written by blacknon

インフラエンジニア(…のつもり)。 仕事で使うならクライアントはWindowsよりはUNIXの方が好き。 大体いつも眠い。

Leave a Comment

メールアドレスが公開されることはありません。

*