Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何同时运行10个python程序?_Python - Fatal编程技术网

如何同时运行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')