Python多重处理无法并行执行

时间:2018-11-28 10:54:53

标签: python multiprocessing

这不是我的实际程序,但是它说明了我的问题。这是代码:

import multiprocessing as mp
import subprocess
import random
O = open("test.txt","w")
for i in range(10000000):
    O.write("%s\n" % (random.randint(0,9)))
O.close()

def worker(number):
    subprocess.call("awk \'$1==%s\' test.txt> test.%s.txt" % (number,number),shell=True)
    return number

pool = mp.Pool(processes=3)
results = [pool.apply(worker, args=(x,)) for x in range(10)]
print(results)

此代码运行良好,但是我注意到awk命令按顺序执行,而不是一次执行3。有什么我想念的吗?

1 个答案:

答案 0 :(得分:2)

multiprocessing.Pool.apply ...

  

阻止,直到结果准备好为止。在这种情况下,apply_async()更适合并行执行工作。

如果您的核心工作确实涉及启动子流程而不是在Python中进行本机工作,那么您也可以考虑在单个Python进程中直接启动一堆subprocess.Popen对象,然后poll()和{{ 3}}。这样可以节省一层流程,但是如果子流程正在向自己的stdout编写内容,则收集这些子流程的输出可能会更加棘手。