【发布时间】:2018-08-14 18:40:09
【问题描述】:
抱歉,代码太长了,我已尝试使其尽可能简单且可重现。
简而言之,这个 python 脚本启动了四个将数字随机分配到列表中的进程。然后,将结果添加到multiprocessing.Queue()。
import random
import multiprocessing
import numpy
import sys
def work(subarray, queue):
result = [numpy.array([], dtype=numpy.uint64) for i in range (0, 4)]
for element in numpy.nditer(subarray):
index = random.randint(0, 3)
result[index] = numpy.append(result[index], element)
queue.put(result)
print "after the queue.put"
jobs = []
queue = multiprocessing.Queue()
subarray = numpy.array_split(numpy.arange(1, 10001, dtype=numpy.uint64), 4)
for i in range(0, 4):
process = multiprocessing.Process(target=work, args=(subarray[i], queue))
jobs.append(process)
process.start()
for j in jobs:
j.join()
print "the end"
所有进程都运行print "after the queue.put" 行。但是,它没有到达print "the end" 行。很奇怪,如果我将arange 从10001 更改为1001,它就会结束。发生了什么?
【问题讨论】:
-
我可以在 python3.6 上重新创建这种行为。我也不知道发生了什么。这种行为非常奇怪。一个简单的解决方法是在最后从队列中收集结果而不是加入。
-
@Jannick 我没有得到“最后而不是加入”。你能描述一下那部分吗?
标签: python-2.7 numpy multiple-processes