私が見ている問題を説明するために、次のコードを書きました。Process.Manager.list()
リストを追跡し、そのリストのランダムなインデックスをインクリメントするためにa を使用しようとしています。
100 個のプロセスが生成されるたびに、各プロセスはリストのランダム インデックスを 1 ずつ増やします。したがって、結果のリストの SUM は毎回同じであると予想されますよね? 203 から 205 の間の何かを取得します。
from multiprocessing import Process, Manager
import random
class MyProc(Process):
def __init__(self, A):
Process.__init__(self)
self.A = A
def run(self):
i = random.randint(0, len(self.A)-1)
self.A[i] = self.A[i] + 1
if __name__ == '__main__':
procs = []
M = Manager()
a = M.list(range(15))
print('A: {0}'.format(a))
print('sum(A) = {0}'.format(sum(a)))
for i in range(100):
procs.append(MyProc(a))
map(lambda x: x.start(), procs)
map(lambda x: x.join(), procs)
print('A: {0}'.format(a))
print('sum(A) = {0}'.format(sum(a)))