这是我尝试执行多个过程的测试代码:
In [157]: imgs = np.random.randint(0,255,(10,48,48,1)) # input
In [158]: z = np.zeros(imgs.shape[:-1] + (2,), dtype=imgs.dtype)
In [159]: np.concatenate((imgs, z), axis=-1).shape
Out[159]: (10, 48, 48, 3)
在每个子流程中,我可以在from multiprocessing import Process, Pool, Queue
a = []
def long_time_task(name):
print 'run task %s (%s)' % (name,os.getpid())
start = time.time()
time.sleep(random.random() * 3)
end = time.time()
a.append(name)
print a
if __name__ == '__main__' :
print 'parent process %s' % os.getpid()
p = Pool(5)
for i in range(10):
p.apply_async(long_time_task,args = (i,))
print 'waiting for all subprocess done'
print a
p.close()
p.join()
print 'all subprocesses done'
之后的末尾打印不同的细分,例如p.join()
。但问题是如何将这些段聚合成一个实体[0,1,...,10]来打印?
任何想法都会有所帮助。
答案 0 :(得分:0)
每个流程都有自己的a
列表副本,因此他们不会追加到同一个对象,而您的主流程也无法获得结果。
您需要使用multiprocessing.Queue
并将结果排入队列。
然后,您的主进程可以将结果出列并根据需要进行处理。
答案 1 :(得分:0)
您正在关注的是流程之间的沟通。您可以使用此处的文档中描述的队列: