如何同时运行多个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()
答案 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