Python运行多个进程

时间:2018-01-20 11:19:42

标签: python multiprocessing

我有一个脚本( a.py )需要多次调用另一个脚本( b.py ),每次执行 b.py < / strong>需要1分钟。如果我在for循环中运行,这需要花费很多时间。

我想知道如何优化这一点,以减少时间。 任何帮助或建议都会非常有帮助。

源代码:

# a.py
import os

if __name__ == '__main__':
    inputs = ['file1', 'file2', 'file3', 'file4']
    script_path = 'b.py'

    # Some logging statements. 
    for infile in inputs:
    os.system("{} -i {}".format(script_path, infile))  


# b.py
    # take arguments
    # perform some operations
    # log the execution

到目前为止,我一直在使用os.system来调用另一个脚本。如何同时调用脚本 b.py n次?

2 个答案:

答案 0 :(得分:0)

没有办法可以这样优化。如果要为列表中的每个项运行脚本b,则迭代是执行此操作的唯一方法。可能是您可以更改脚本b的内容以更快地运行,但这是一个不同的问题。

答案 1 :(得分:0)

您可以使用muliprocessing.Process并行运行它:

from multiprocessing import Process

inputs = ['file1', 'file2', 'file3', 'file4']
script_path = 'b.py'

def run(script, name):
    os.system("{} -i {}".format(script, name))  

if __name__ == '__main__':
    inputs = ['file1', 'file2', 'file3', 'file4']
    script_path = 'b.py'
    for infile in inputs:
        p = Process(target=run, args=(script_path, infile))
        p.start()
    p.join()

注意:使用os.system从Python脚本执行Python脚本并不是很优雅。您应该修改脚本b.py,使其作为一个模块,为其主要功能提供功能或类。然后,您可以导入b并使用这些函数或类。