我是多处理的新手。我更改了一个简单的示例代码,其中列表被发送到工作程序子进程,更改并发送回打印。我已对其进行了更改,以便测试多个进程是否并行运行并在每个进程完成时返回。我测试它的方法是同时启动总[0],总[1],总[2],总计[3] 但强制在返回前仅暂停[2]总计[2]
结果:
总[0],总[1]打印即刻。
总[2]等待(它应该)但总[3]也等待。
输出返回如下:
['', 'DOCTYPE', 'HTML'] ['LAST', 'NAV'] ['TOPIC', 'FORUM'] ['HEADLINE2', 'INNERHTML']
当我预期它会像这样返回时:
['', 'DOCTYPE', 'HTML'] ['LAST', 'NAV'] ['HEADLINE2', 'INNERHTML'] ['TOPIC', 'FORUM']
正如我所说,我对子处理很陌生。任何帮助表示赞赏。谢谢
我的示例代码
import multiprocessing as mp
import time
def worker(inq,outq):
obj = inq.get()
for b in range(len(obj)):
obj[b] = obj[b].upper()
if obj[0] == 'TOPIC': time.sleep(9)
outq.put(obj)
total = [['', 'doctype', 'html'], ['last', 'nav'], ['Topic', 'forum'], ['headline2', 'innerHTML']]
if __name__=='__main__':
inq = []
outq = []
p = []
for i in range(len(total)):
inq.insert(i, mp.Queue())
outq.insert(i, mp.Queue())
p.insert(i, mp.Process(target=worker, args=(inq[i],outq[i])))
p[i].start()
inq[i].put(total[i])
for i in range(len(total)):
# Wait for the worker to finish
p[i].join()
result1 = outq[i].get()
print(result1)
答案 0 :(得分:1)
在您的上一个for
循环中,您将按顺序获得结果 - 因此,即使3
在2
之前完成,您也会先得到2
个结果
尝试将行print(obj)
添加到worker()
的末尾,以便3
首先完成。