• 多进程启动不同的python程序


    多进程启动不同的python程序

    1、同时启动多个进程

    如果传入的参数可能有不定个数,或者需要传递特定的参数(如lenindex等),你可以在被调用脚本中使用更灵活的参数解析策略,并在调用时相应地构造参数列表。对于不定个数的参数,argparse模块提供了add_argument方法的nargs参数,可以用来指定参数的数量。对于特定的参数,你可以通过关键字参数(即命名参数)的形式传递。

    处理不定个数的参数

    假设你想要接收一个或多个参数作为一个列表,你可以在argparse中使用nargs='+'来实现。这表示该命令行参数至少需要一个值。

    修改script1.py来接收不定个数的参数:

    # script1.py
    import argparse
    
    if __name__ == "__main__":
        parser = argparse.ArgumentParser(description='Script 1 with variable number of parameters')
        parser.add_argument('params', nargs='+', help='A list of parameters for script 1')
        args = parser.parse_args()
    
        print(f"Script 1 received the following parameters: {args.params}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    处理特定的参数

    如果你需要传递特定的参数(如lenindex等),你可以为每个特定的参数定义一个命令行参数。

    修改script2.py来接收特定的参数:

    # script2.py
    import argparse
    
    if __name__ == "__main__":
        parser = argparse.ArgumentParser(description='Script 2 with specific parameters')
        parser.add_argument('--len', type=int, help='Length parameter for script 2', required=True)
        parser.add_argument('--index', type=int, help='Index parameter for script 2', required=True)
        args = parser.parse_args()
    
        print(f"Script 2 received length = {args.len} and index = {args.index}")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    修改run_scripts.py

    接下来,修改run_scripts.py以传递不定个数的参数和特定的参数:

    # run_scripts.py
    import subprocess
    from multiprocessing import Process
    
    def run_script(script_name, *args):
        # 构造命令行参数列表
        command = ["python", script_name] + list(args)
        subprocess.run(command)
    
    if __name__ == "__main__":
        # 创建进程并传递不同类型的参数
        p1 = Process(target=run_script, args=("script1.py", "param1", "param2", "param3"))
        p2 = Process(target=run_script, args=("script2.py", "--len", "10", "--index", "5"))
    
        p1.start()
        p2.start()
    
        p1.join()
        p2.join()
    
        print("All scripts completed.")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    在这个例子中,run_script函数接受一个脚本名称和一个不定数量的参数(使用*args来收集)。然后,它构造了一个命令行参数列表,并通过subprocess.run执行脚本。

    这样,你就可以灵活地向脚本传递不定个数的参数或特定的命名参数了。注意,当传递命名参数(如--len--index)时,需要确保这些参数的顺序与脚本中定义的顺序一致,或者确保参数名称明确指出。

    2、运行完一个进程再执行下一个进程

    要实现先运行完一个进程再运行下一个进程,你可以简单地按顺序启动并等待每个进程完成,而不是将它们全部启动后再一起等待。这可以通过在Python中直接调用subprocess.run()来实现,因为subprocess.run()默认行为就是等待命令完成。

    下面是如何修改run_scripts.py来顺序执行script1.pyscript2.py的示例:

    # run_scripts.py
    import subprocess
    
    def run_script(script_name, *args):
        # 构造命令行参数列表
        command = ["python", script_name] + list(args)
        # 运行脚本并等待其完成
        subprocess.run(command)
    
    if __name__ == "__main__":
        # 首先运行script1.py并等待其完成
        run_script("script1.py", "param1", "param2", "param3")
        # script1.py完成后,运行script2.py
        run_script("script2.py", "--len", "10", "--index", "5")
    
        print("All scripts completed.")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    在这个版本的run_scripts.py中,run_script函数被顺序调用两次,每次都传入不同的脚本和参数。subprocess.run()将会启动每个脚本并等待其完成,然后再继续到下一个调用。这样,script1.py将会首先运行并完成,接着script2.py才会开始运行。

    这种方法适用于你需要按特定顺序执行多个任务,并且后一个任务依赖于前一个任务完成的情况。这样可以确保在开始下一个进程之前,当前进程已经完全执行完毕。

  • 相关阅读:
    vue3+elementPlus table滚动条样式覆盖
    Redis事务
    Git工具快速入门
    保姆级透明背景动画导出 —— json格式(Mac系统)
    顺序表第三节(通讯录基础版)
    Blazor前后端框架Known-V1.2.10
    深度学习:YOLO环境搭建
    【UnityShaderLab实现“Billboard“始终面向相机_播放序列图的效果_案例分享(内附源码)】
    MySQL驱动jar包的下载--保姆教程
    【Vue】浏览器自定义格式化工具
  • 原文地址:https://blog.csdn.net/qq_51116518/article/details/136726644