我试图用多返回一个列表,而不是等待,直到所有工序均由内部完成,我得到一些回报,从一个return语句在mp_factorizer,就像这样:
None
None
(returns list)
在这个例子中我使用2个线程。 如果我用了5个线程,就不会有列表中被放出来之前5无返回。 下面是代码:
def mp_factorizer(nums, nprocs, objecttouse):
if __name__ == '__main__':
out_q = multiprocessing.Queue()
chunksize = int(math.ceil(len(nums) / float(nprocs)))
procs = []
for i in range(nprocs):
p = multiprocessing.Process(
target=worker,
args=(nums[chunksize * i:chunksize * (i + 1)],
out_q,
objecttouse))
procs.append(p)
p.start()
# Collect all results into a single result dict. We know how many dicts
# with results to expect.
resultlist = []
for i in range(nprocs):
temp=out_q.get()
index =0
for i in temp:
resultlist.append(temp[index][0][0:])
index +=1
# Wait for all worker processes to finish
for p in procs:
p.join()
resultlist2 = [x for x in resultlist if x != []]
return resultlist2
def worker(nums, out_q, objecttouse):
""" The worker function, invoked in a process. 'nums' is a
list of numbers to factor. The results are placed in
a dictionary that's pushed to a queue.
"""
outlist = []
for n in nums:
outputlist=objecttouse.getevents(n)
if outputlist:
outlist.append(outputlist)
out_q.put(outlist)
mp_factorizer得到的物品,线程#列表,并且该工作人员应该使用一个对象,它然后分裂了项目列表,以便所有线程获取列表等量,并启动工人。 工人然后使用该对象从给定的列表计算的东西,其结果添加到队列中。 Mp_factorizer应该收集从队列中的所有结果,它们合并成一个大名单,并返回该列表。 然而 - 我得到多方面的回报。
我究竟做错了什么? 或者这是预期的行为,由于奇怪的方式Windows处理多重? (Python的2.7.3,Windows7的64位)
编辑:问题是错误的位置if __name__ == '__main__':
我发现了另一个问题工作时,看到在一个子过程中使用多一个完整的解释。