如何同时运行多个python文件?

时间:2018-02-21 11:19:50

标签: python multiprocessing

如何同时运行多个python文件?有3个文件:bot_1.py,bot_2.py,bot_3.py。我想同时运行它们。我附上了代码。我应该在worker函数中写什么才能使这个脚本工作? 我将不胜感激。

import multiprocessing
import subprocess
def worker(file):
    #your subprocess code
    subprocess.Popen(['screen', './bot_1.py'])
    subprocess.Popen(['screen', './bot_2.py'])
    subprocess.Popen(['screen', './bot_3.py'])

if __name__ == '__main__':
    files = ["bot_1.py","bot_2.py","bot_3.py"]
    for i in files:
        p = multiprocessing.Process(target=worker(i))
        p.start()

2 个答案:

答案 0 :(得分:2)

假设您的bot文件在命令行运行时执行某些操作,我们可以加载它们并通过将它们导入我们的python进程(而不是shell)来执行它们。由于每个python文件定义了一个包,我们可以按如下方式执行此操作:

import bot_1, bot_2, bot_3

然而,这会一个接一个地运行它们,并且还会阻止您运行相同的两次。为了让它们立即运行,我们可以按照您的建议使用多处理:

import multiprocessing

for bot in ('bot_1', 'bot_2', 'bot_3'):
    p = multiprocessing.Process(target=lambda: __import__(bot))
    p.start()

进程需要运行一个函数,所以我们使用匿名lambda给它一个,然后动态导入名称。

此处未显示,但只要您不将模块导入父进程,子进程就会被强制加载,这意味着如果需要,可以在单独的进程中反复运行相同的进程。到。

答案 1 :(得分:1)

从文档中,在多处理中,通过创建Process对象然后调用其start()方法来生成进程。

所以我想这样做的好方法是:

bots = ['bot1','bot2','bot3']
modules = map(__import__,bots)

import multiprocessing,subprocess

multiprocessing.Process(target=modules)

在bot1,2,3中,我使用了简单的打印(" bot1"),bot2和bot3,输出正如预期:

user@machine:~$ python mainscript.py 
bot1
bot2
bot3