【问题标题】:Run multiple python file concurrently同时运行多个python文件
【发布时间】:2018-12-20 09:16:26
【问题描述】:

如何同时运行多个python文件

我有三个文件 pop.py pop1.py pop2.py 我想同时运行这个文件 这些文件正在一个一个地运行 运行所有文件的python代码

【问题讨论】:

  • 你需要启动不同的进程(线程是不够的)所以最简单的方法是手动启动它们。
  • 欢迎来到 Stackoverfow。如果您可以在问题中包含一些代码以及您期望发生的事情和实际发生的事情的描述,那么您更有可能获得相关答案。这个网站主要是关于帮助人们让他们现有的代码工作。即使它是一个 shell 脚本 - 让我们看看你尝试了什么。

标签: python python-3.x python-2.7


【解决方案1】:

您可以使用 subprocess 模块轻松完成此操作。

import subprocess

process1 = subprocess.Popen(["python", "pop.py"]) # Create and launch process pop.py using python interpreter
process2 = subprocess.Popen(["python", "pop1.py"])
process3 = subprocess.Popen(["python", "pop2.py"])

process1.wait() # Wait for process1 to finish (basically wait for script to finish)
process2.wait()
process3.wait()

【讨论】:

  • 我想同时运行每个文件
  • 这会同时运行所有进程,进程启动时间之间的唯一延迟是 Popen 函数的执行,这无关紧要
【解决方案2】:

它必须是 python 解决方案吗?对于上述问题,在 bash 中启动所有三个可能是最简单的:

python pop.py &
python pop1.py &
python pop2.py &
wait # wait for all three to finish, if needed

虽然此解决方案同时运行它们,但您应该考虑为什么希望它们同时运行。您是否正在尝试并行化您的计算?流程是否进行通信(例如生产者/消费者模式)?它们之间有依赖关系吗?在除了最简单的情况下,通常最好将所有三个 python 模块捆绑到一个 python 包中,并添加一些导入所有三个模块的运行器代码,将每个模块作为一个线程启动(参见 oren revenge 的答案),并处理任何间-进程通信。

【讨论】:

    【解决方案3】:

    在每个 python 文件中创建 main() 函数,然后导入主文件中的所有文件。然后调用所有主函数。

    from . import pop
    from . import pop1
    # and so on
    
    # and now call all main functions
    pop.main()
    pop1.main()
    # and so on
    

    【讨论】:

      【解决方案4】:

      像这样创建一个Shell文件

       python pop.py
       python pop1.py
       python pop2.py
      

      并运行 .sh 文件。 .sh 一个一个地运行多个文件

      【讨论】:

      • 如前所述,这将依次运行三个文件。
      【解决方案5】:

      我建议阅读 Python 中的 threading。您应该考虑将代码重新排列在一个文件中。

      伪码

      import threading
      
      class Pop(threading.Thread):
          def run(self):
              # Content from "pop.py"
              # Maybe some some changes are needed
      
      
      class Pop1(threading.Thread):
          def run(self):
              # Content from "pop1.py"
      
      
      # ...
      
      pop = Pop()
      pop1 = Pop1()
      # ...
      
      pop.start()
      pop1.start()
      # ...
      

      【讨论】:

        【解决方案6】:
        import test1,test2
        from threading import Thread
        
        Thread(target=test2.main).start()
        Thread(target=test1.main).start()
        

        此脚本同时运行 test1.py 和 test2.py。 希望这会有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-10-04
          • 2020-04-23
          • 1970-01-01
          • 1970-01-01
          • 2021-06-06
          • 2019-07-16
          相关资源
          最近更新 更多