【发布时间】:2017-06-22 20:50:46
【问题描述】:
我有一个非常可并行化的任务:给定一个 ID,在图形结构中查找它,查看它指向的 id 并计算它们值的平均值。
我正在使用 python 多处理来完成这项任务,我有一个名为 graph 的对象,它总结了我感兴趣的属性和层次结构。
以非常幼稚的方式使用 python 多处理:
processes = []
for i in range(10):
currDataset = getOneTenthofDataset(fullDataset)
process = multiprocessing.process(name='name', target=func1, args=(currDataset, graph))
processes.append(process)
process.start()
for p in processes:
p.join()
def func1(dataset, graph):
...
for each row of dataset query on graph, update current row accordingly
save dataset to file (I don't need to return the splitted datasets!)
我发现计算时间几乎没有加速(我认为这可能是由于图形上的查询正在排队而不是并行完成?) 所以我做的是
def func2(dataset, graph):
localGraph = copy.deepcopy(graph)
.. same code as func1 ..
这导致了一个神秘而奇怪的错误!事实上,并不是所有的过程都正确结束,但只有 1/3 到 1/2 的过程,并且每次不同的过程都正确结束。避免使用 deepcopy,而是一切正常。 另一个奇怪的行为是,没有到达最后的进程不会抛出任何错误,它们只是停止执行并且不会转到 deepcopy 之后的指令! 最后,程序没有任何错误就终止了
【问题讨论】:
-
您使用的是 Windows 还是类 unix 系统?
-
Unix:Ubuntu 16.10
标签: python multiprocessing deep-copy