これは私の実際のアプリケーションの人為的な例のように私に負担してください。私が数字のリストを持っていて、複数のプロセスを使ってリスト内の各数字に一つの数字を追加したかったとします。私はこのようなことをすることができます:Pythonマルチプロセッシングのさまざまなプロセスの異なる入力
import multiprocessing
my_list = list(range(100))
my_number = 5
data_line = [{'list_num': i, 'my_num': my_number} for i in my_list]
def worker(data):
return data['list_num'] + data['my_num']
pool = multiprocessing.Pool(processes=2)
pool_output = pool.map(worker, data_line)
pool.close()
pool.join()
しかし、私の問題にはしわがあります。 2つの数字を交互に追加したいとします(1つだけ追加するのではなく)。だから半分くらいの時間で、私はmy_number1
を追加し、残りの半分はmy_number2
を追加したいと思います。どの番号がリストのどの項目に追加されるかは関係ありません。しかし、1つの要件は、異なるプロセス間で同時に同じ番号を同時に追加したくないということです。これは本質的に(私は)思うところですが、プロセス1の最初の番号とプロセス2の2番目の番号を排他的に使用して、同じ番号を同時に追加することはありません。したがって、次のようなものがあります。
my_num1 = 5
my_num2 = 100
data_line = [{'list_num': i, 'my_num1': my_num1, 'my_num2': my_num2} for i in my_list]
def worker(data):
# if in Process 1:
return data['list_num'] + data['my_num1']
# if in Process 2:
return data['list_num'] + data['my_num2']
# and so forth
プロセスごとに特定の入力を指定する簡単な方法はありますか?この問題を考えるもう一つの方法はありますか?