抱歉,代码太长了,我试图让它尽可能简单但可重现。
简而言之,这个 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
from更改10001
为1001
,它就会结束。怎么了?