繁体   English   中英

同时运行多个.py python文件

[英]Run multiple .py python file at the same time

我已经制作了 100.py 文件,现在我想同时运行它们,它们都有相同的 function,只是参数在变化。 每个文件可能需要 20 分钟才能完全运行,所以我需要它们同时运行。 我怎样才能做到这一点?

您只需要 1 个文件和多线程、一个包含 100 个 arguments 的数组和方法,然后创建一个为每个参数启动一个新线程的 for 循环。

否则你可以在 bash/zsh shell 中创建 for 循环

#!/bin/bash
for filename in *.py; do
    python $filename
done

注意:脚本必须与 python 文件位于同一目录中才能工作。 否则你必须定义我写 *.py 的路径,例如 /home/user/python_project/*.py

取决于您使用的 shell。 如果您使用的是 Linux 终端,您可以使用以下方法轻松完成:

python file1.py & python file2.py & python file3.py

等等。

无论哪种方式,您都可以编写 bash 脚本来自动创建此模式,而不是手动指定名称。

您可以从 first.py 调用 second.py 等等

首先:如果您的所有文件都完全相同,但只有一个参数发生变化,那么创建 100 个文件副本会感觉非常错误。 您需要做的是在运行脚本时传递该参数。

所以这里是综述:

鉴于:

  • 您的脚本可能看起来像这样

    if __name__ == "__main__": #this line catches your argument your_argument = sys.argv[1] print(your_argument)
  • 另一个脚本将负责运行 100 个脚本实例

     if __name__ == "__main__": #you fill this list with all the arguments (ie: [ 'arg1', 'arg2'...]) aListOfArguments = [] for argument in aListOfArguments: subprocess.Popen( [ 'path/to/your/script/script.py',argument ], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL, shell = False, close_fds = False, preexec_fn=os.setpgrp )

上面的代码将自动启动脚本的多个实例,但每次都会传递不同的参数。

但是,如果您仍想使用您的解决方案 - 100 个单独的脚本,您每次都在其中硬编码参数 - 这将起作用

注意:这在假设您的 100 个 python 脚本位于同一文件夹内的情况下有效

if __name__ == "__main__":
      scriptList= os.listdir('/path/to/scripts/folder')
      for script in scriptList:
           subprocess.Popen( [ '/path/to/scripts/folder/{}'.format(script) ], 
                            stdout=subprocess.DEVNULL,
                            stderr=subprocess.DEVNULL,    
                            shell = False,
                            close_fds = False,
                            preexec_fn=os.setpgrp          
                            )

此代码仅创建一个列表,其中包含文件夹中包含的所有文件的名称。 之后你像以前一样再次调用 Popen

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM