如何同时运行10个python程序?

时间:2019-08-23 16:07:35

标签: python

我有re.findall>>> import re >>> re.findall(r'(?<= ).*?(?= \()', string) ['UNDERCARRIAGE', 'TRACK ROLLER FRAME', 'TRACK ADJUSTER', 'SPROCKET ASSEMBLY', 'TRACK ASSEMBLY', 'TRACK SHOE']

我想并行运行10个python程序。

我尝试过:

a_1.py

但这不起作用

我该如何解决?

3 个答案:

答案 0 :(得分:2)

我建议使用subprocess模块而不是>> sudo export ORACLE_HOME="/path/to/it" >> sudo export LD_LIBRARY_PATH="/path/to/it" >> . ~/.bashrc

multiprocessing

答案 1 :(得分:0)

如果您只需要调用10个外部py脚本(a_1.pya_10.py)作为单独的进程,请使用subprocess.Popen类:

import subprocess, sys

for i in range(1, 11):
    subprocess.Popen(['python3', f'a_{i}.py'])

# sys.exit()   # optional

值得看看丰富的subprocess.Popen签名(您可能会找到一些有用的params / options)

答案 2 :(得分:0)

您可以使用多处理池来同时运行它们。

import multiprocessing as mp

def worker(module_name):
    """ Executes a module externally with python """
    __import__(module_name)
    return

if __name__ == "__main__":
    max_processes = 5
    module_names = [f"a_{i}" for i in range(1, 11)]
    print(module_names)
    with mp.Pool(max_processes) as pool:
        pool.map(worker, module_names)

max_processes变量是在任何给定时间可以工作的最大工人数。换句话说,它是程序产生的进程数。 pool.map(worker, module_names)使用可用的进程并在module_names列表中的每个项目上调用worker。我们不包含.py,因为我们通过导入来运行模块。

注意:如果要在模块中运行的代码包含在if __name__ == "__main__"块中,则此方法可能无效。如果是这种情况,那么我的建议是将if __name__ == "__main__"模块的a_{}块中的所有代码移到main函数中。此外,您还必须将工作程序更改为:

def worker(module_name):
    module = __import__(module_name) # Kind of like 'import module_name as module'
    module.main()
    return