这是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中,我得到了所需的输出,其中p1
和p2
同时启动。必须是Windows问题。 Windows有什么问题?