Python3,我的多处理示例没有运行并行进程

时间:2012-01-07 12:53:59

标签: python-3.x parallel-processing multiprocessing

我是多处理的新手。我更改了一个简单的示例代码,其中列表被发送到工作程序子进程,更改并发送回打印。我已对其进行了更改,以便测试多个进程是否并行运行并在每个进程完成时返回。我测试它的方法是同时启动总[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)

1 个答案:

答案 0 :(得分:1)

在您的上一个for循环中,您将按顺序获得结果 - 因此,即使32之前完成,您也会先得到2个结果

尝试将行print(obj)添加到worker()的末尾,以便3首先完成。