dict をmultiprocessing.poll.apply_async
子プロセスに渡す際に問題が発生しています。
pool = mp.Pool(processes=cores) #Create a pool of workers, one for each core
for job in range(cores): #Prep to assign each core a job
pool.apply_async(initialize, args=(job,z,w,floor,p,))
pool.close()
pool.join()
w は属性を持つオブジェクト.neighbors
です。この属性はdict
、id のトポロジーを格納する (つまり、近隣) です。子プロセスでこの属性にアクセスしようとすると、空の が返されますdict
。dict を直接渡そうとすると、空のdict
:
neighbor_dict = w.neighbors
...
pool.apply_async(initialize, args=(job,z,w,neighbor_dict,floor,p,))
dict にアクセスするためにマネージャーを使用する必要はないと思います。読み取りアクセスのみが必要です。
また、この質問は、OPがマルチプロセッシングを使用しているという点で似ています。プールを使用するのとは対照的に、プロセスを使用しています。私も POSIX システムを使用しているため、fork() の影響を受けるはずです。