如何同时运行10个python程序?
我有如何同时运行10个python程序?,python,Python,我有a_1.py~a_10.py 我想并行运行10个python程序 我试过: from multiprocessing import Process import os def info(title): I want to execute python program def f(name): for i in range(1, 11): subprocess.Popen(['python3', f'a_{i}.py']) if __name__ ==
a_1.py
~a_10.py
我想并行运行10个python程序
我试过:
from multiprocessing import Process
import os
def info(title):
I want to execute python program
def f(name):
for i in range(1, 11):
subprocess.Popen(['python3', f'a_{i}.py'])
if __name__ == '__main__':
info('main line')
p = Process(target=f)
p.start()
p.join()
但它不起作用
如何解决这个问题?如果您只需要调用10个外部
py
脚本(a_1.py
~a_10.py
),作为一个单独的进程-使用类:
值得一看丰富的
subprocess.Popen
签名(您可能会发现一些有用的参数/选项)您可以使用多处理池并发运行它们
将多处理导入为mp
def工作者(模块名称):
“”“使用python在外部执行模块”“”
__导入(模块名称)
回来
如果名称=“\uuuuu main\uuuuuuuu”:
最大进程数=5
模块名称=[f“a{i}”表示范围(1,11)内的i]
打印(模块名称)
使用mp.Pool(最大进程)作为池:
pool.map(工作者、模块名称)
max\u processs
变量是在任何给定时间工作的最大工人数量。换句话说,它是程序生成的进程数。pool.map(worker,module\u name)
使用可用的进程并对module\u name列表中的每个项目调用worker。我们不包括.py,因为我们是通过导入来运行模块的
注意:如果要在模块中运行的代码包含在if\uuuuuu name\uuuuu==“\uuuuuuu main\uuuu”
块中,则此操作可能不起作用。如果是这种情况,那么我的建议是将a{}
模块的If{uu name{uu==“{uuu main}
块中的所有代码移到main
函数中。此外,您还必须将worker更改为以下内容:
def工作者(模块名称):
module=uuu import_uuu(module_name)#有点像“import module_name as module”
module.main()
回来
我建议使用模块而不是多处理
:
import os
import subprocess
import sys
MAX_SUB_PROCESSES = 10
def info(title):
print(title, flush=True)
if __name__ == '__main__':
info('main line')
# Create a list of subprocesses.
processes = []
for i in range(1, MAX_SUB_PROCESSES+1):
pgm_path = f'a_{i}.py' # Path to Python program.
command = f'"{sys.executable}" "{pgm_path}" "{os.path.basename(pgm_path)}"'
process = subprocess.Popen(command, bufsize=0)
processes.append(process)
# Wait for all of them to finish.
for process in processes:
process.wait()
print('Done')
如果您在浏览器中搜索“Python并行处理”,您将找到比我们在这里能够更好地解释这一点的参考资料。你必须分出10个子进程;您发布的代码只分叉迭代父级,
f
。在循环中尝试POpen
。看起来是shell脚本的理想位置,Python对于这样的作业来说太过复杂了,它不能同时运行。OTL@GoBackess,那是错误的,它是同时运行的。我不相信这一点。你是个天才,我非常感谢你为我的严重困难抽出时间。非常感谢你,我无法表达我自己。
import os
import subprocess
import sys
MAX_SUB_PROCESSES = 10
def info(title):
print(title, flush=True)
if __name__ == '__main__':
info('main line')
# Create a list of subprocesses.
processes = []
for i in range(1, MAX_SUB_PROCESSES+1):
pgm_path = f'a_{i}.py' # Path to Python program.
command = f'"{sys.executable}" "{pgm_path}" "{os.path.basename(pgm_path)}"'
process = subprocess.Popen(command, bufsize=0)
processes.append(process)
# Wait for all of them to finish.
for process in processes:
process.wait()
print('Done')