多处理:进程在Windows上串行运行

时间:2016-08-15 19:25:29

标签: python multiprocessing

这是Parallel processing of lists

的后续问题

我认为这是值得的另一个问题。

任务:

我有一个列表,我把它分成两个相同长的部分,我在两个不同的过程中对它们进行排序。

import multiprocessing
import random

def sort(l, queue):
    queue.put(sorted(l))
    print "sorted"


if __name__ == '__main__':
    l = [int(100000*random.random()) for i in range(100000)]

    listlen = len(l)
    halflist = listlen/2

    manager = multiprocessing.Manager()
    queue = manager.Queue()

    p1 = multiprocessing.Process(target=sort, args=(l[0:halflist], queue))
    p2 = multiprocessing.Process(target=sort, args=(l[halflist:listlen], queue))

    p1.start()
    print "p1 started"
    p2.start()
    print "p2 started"

    p1.join()
    print "p1 joined"
    p2.join()
    print "p2 joined"

如果sort看起来像这样:

def sort(l, queue):
    time.sleep(5)
    print "sorted"

它按预期工作。 p1和p2立即开始。如果我确实排序,输出总是这样:

p1 started
sorted
p2 started
p1 joined
sorted
p2 joined

所以p2总是在p1完成排序后开始。我可以根据需要增加列表中的元素数量(到10M,这样就没有人能说排序太快了),它不会改变。

为什么它们不是并行处理的,我该如何解决?

使用Win7x64,Python 2.7.12

在使用Python 2.7.12的Linux-VB中,我得到了所需的输出,其中p1p2同时启动。必须是Windows问题。 Windows有什么问题?

0 个答案:

没有答案