【发布时间】:2019-01-31 18:49:48
【问题描述】:
我遇到了multiprocessing.Pool.apply 的问题。
我的目标是有 5 个进程,每个进程用 100 个元素填充一个数组(此测试为 100 个),然后将数组合并成一个长度为 500 的数组。问题是,由于任何原因,它最终只有 400 个元素我不能明白。
我已尝试更改池创建的进程数量,但除了执行时间之外没有任何改变。
import torch.multiprocessing as mp
import itertools
pool = mp.Pool(processes=5)
split = int(500/5)
lst = pool.apply(RampedGraph, (split,[])) #each foo returns a list of 100 elements
lst = list(itertools.chain.from_iterable(lst)) #merging the lists into one
len(lst)
>>>400
len(lst) 的预期输出应该是500。
谁能告诉我我做错了什么?
EDIT Foo 方法说明:
def RampedGraph(popsize, graph_lst):
cyclic_size = int(math.ceil(popsize/2))
acyclic_size = popsize - full_size
append = graph_lst.append
for _ in range(cyclic_size):
t = c.Node().cyclic()
nn = c.number_of_nodes()
c = c.calculate(0, False)
append((t,nn,c))
for _ in range(acyclic_size):
t = c.Node().acyclic()
nn = c.number_of_nodes()
c = c.calculate(0, False)
append((t,nn,c))
return graph_lst
【问题讨论】:
-
@unutbu done ,添加完整方法
-
pool.apply(RampedGraph, (split,[]))只调用一次RampedGraph(split, [])。您是否尝试拨打RampedGraph5 次?都是同一个论点? -
@unutbu 我试图为每个进程调用一次,所以我可以合并 5 个 100 个元素的数组。都具有相同的论点
标签: python python-3.x multiprocessing pool