pythonのマルチスレッドのメソッドから戻り値を得るにはどうしたらよいですか？


スレッドはthreadingでメソッドを複数生成して、ほぼ並列処理みたいな感じというのはなんとなくわかったのですが、メソッドの戻り値がほしいときは、どのようにしてとったらよいのでしょうか？理想は全ての戻り値を足すことができればと思っているのですが・・・

まず考え方が間違っているのでしょうか？

[code]

    def pulus(x, y):
        sums = x + y
        return sums
    
    pulus_threads = []
    for i in range(1, 3):
        pulus_thread = threading.Thread(target=pulus, args=(i, i))
        pulus_threads.append(pulus_thread)
        pulus_thread.start()
    for pulus_thread in pulus_threads:
        pulus_thread.join()
    
[/code]




用途によりけりなのですが、今回の場合は`concurrent.futures`の[`ThreadPoolExecutor`](https://docs.python.org/3/library/concurrent.futures.html#executor-
objects)を使うと楽に実装できます。

[code]

    from concurrent.futures import ThreadPoolExecutor
    
    def pulus(x, y):
        sums = x + y
        return sums
    
    with ThreadPoolExecutor(max_workers=10) as executor:
        x = range(5)
        y = range(5, 10)
        res = executor.map(pulus, x, y)
    
    
    print(list(x))
    print(list(y))
    print(list(res))
    
[/code]

`ThreadPoolExecutor`はI/Oがボトルネックのときによく使われます。重い処理を複数のCPUに分散させることが目的でしたら、`ProcessPoolExecutor`のほうがいいかもしれません。

