Python apply_async在args中传递一个dict

时间:2013-01-12 18:03:54

标签: python python-2.7 multiprocessing

我在通过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的访问权,因为我从来没有写过它;我只需要读取权限。

此外,此question类似于OP正在使用多处理。与使用池相比,它们使用Process。我也在POSIX系统上,所以应该受fork()的影响。

1 个答案:

答案 0 :(得分:0)

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