如何同时运行多个Python文件?有3个文件:bot_1.py,bot_2.py,bot_3.py。我想同时运行它们。我附上了代码。我应该在工作函数中写些什么才能使此脚本起作用?我将感谢任何帮助。
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()
假设您的机器人文件在命令行运行时执行某些内容,我们可以通过将它们导入到我们的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给它一个,然后动态导入名称。
它没有在这里显示,但是只要您不将模块导入父进程,孩子就会被迫加载它,这意味着您可以在单独的过程中一遍又一遍地运行相同的操作到。
来自文档的多处理中,通过创建一个过程对象,然后调用其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