1

我在将字典传递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,))

我认为我不需要使用经理来访问字典,因为我从不写信;我只需要读取权限。

此外,这个问题的相似之处在于 OP 正在使用多处理。与使用池相反,他们使用的是 Process。我也在 POSIX 系统上,所以应该受到 fork() 的影响。

4

1 回答 1

0

已解决:似乎无法从另一个模块传递一个类实例。在print w.neighbors返回 adict时,type(w.neighbors)是一个类实例。转换为 adict解决了这个问题。

于 2013-01-12T18:35:35.150 回答