1

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() の影響を受けるはずです。

4

1 に答える 1

0

解決済み: クラス インスタンスを別のモジュールから渡すことができないようです。print w.neighborsが を返している間dicttype(w.neighbors)はクラス インスタンスでした。への変換でdict問題が解決しました。

于 2013-01-12T18:35:35.150 に答える