繁体   English   中英

同时运行多个 python 脚本

[英]Run multiple python scripts concurrently

如何运行多个 python 脚本? 目前我运行一个这样的python script1.py

我试过python script1.py script2.py不起作用:只运行了第一个脚本。 另外,我试过使用这样的单个文件;

import script1
import script2

python script1.py
python script2.py

但是,这也不起作用。

使用 Bash:

python script1.py &
python script2.py &

这就是整个脚本。 它将同时运行两个 Python 脚本。

Python 本身可以做同样的事情,但它需要更多的输入,对于手头的问题来说是一个糟糕的选择。

我认为虽然您采取了错误的方法来解决您的问题,但我想听听您的意见。

同时运行两个 Python 进程的最简单解决方案是从 bash 文件运行它们,并使用& shell 运算符告诉每个进程进入后台。

python script1.py &
python script2.py &

要以更可控的方式并行运行多个进程,请查看Supervisor 项目,或使用多处理模块从 Python 内部进行编排。

我必须这样做并使用子流程。

import subprocess

subprocess.run("python3 script1.py & python3 script2.py", shell=True)

我在 node.js(在 Windows 10 上)中通过打开 2 个单独的 cmd 实例并在每个实例中运行每个程序来执行此操作。

这样做的优点是可以很容易地看到每个脚本对控制台的写入。

我看到在 python 中可以做同样的事情:2 个 shell。

您可以同时运行多个 IDLE/Python shell 实例。 因此,打开 IDLE 并运行服务器代码,然后再次打开 IDLE,这将启动一个单独的实例,然后运行您的客户端代码。

您可以使用

import os
os.system("script1.py && script2.py")

依此类推,您可以根据需要添加任意数量的脚本:只需用&&分隔

这适用于 Windows 操作系统

我正在使用 Python IDLE 在 Windows 7 中工作。 我有两个程序,

# progA
while True:
    m = input('progA is running ')
    print (m)

# progB
while True:
    m = input('progB is running ')
    print (m)

我打开 IDLE,然后打开文件 progA.py。 我运行程序,当提示输入时,我输入"b" + <Enter>然后"b" + <Enter> "c" + <Enter>

我正在看这个窗口:

Python 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 17:26:49) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> 
= RESTART: C:\Users\Mike\AppData\Local\Programs\Python\Python36-32\progA.py =
progA is running b
b
progA is running c
c
progA is running 

接下来,我回到 Windows 开始并再次打开 IDLE,这次打开文件 progB.py。 我运行程序,当提示输入时,我输入"x" + <Enter> ,然后"x" + <Enter> "y" + <Enter>

我正在看这个窗口:

Python 3.6.3 (v3.6.3:2c5fed8, Oct  3 2017, 17:26:49) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> 
= RESTART: C:\Users\Mike\AppData\Local\Programs\Python\Python36-32\progB.py =
progB is running x
x
progB is running y
y
progB is running 

现在两个 IDLE Python 3.6.3 Shell 程序同时运行,一个 shell 运行 progA 而另一个运行 progB。

您可以使用Gnu-Parallel并发运行命令,适用于 Windows、Linux/Unix。

parallel ::: "python script1.py" "python script2.py"

建议在 bash 脚本的末尾添加一个wait ,因为脚本会在其中一个进程完成时退出。 如果我们需要脚本在所有python进程完成后才退出, wait在bash脚本末尾添加一个wait

所以脚本将是

#!/bin/bash
python script1.py ;
python script2.py &
python script3.py &
wait

; 在第一个脚本的末尾用于运行 script1 & 一旦完成,然后并行启动 script2 & script3 并等待所有 3 个脚本都完成。

如果要并行运行两个Python脚本,则只需在脚本末尾包含以下内容:

if __name__=="__main__":
     Main()

我认为最简单的方法是使用 PyCharm IDE 并安装“multirun”插件。 我在这里尝试了很多解决方案,但最终这个解决方案对我有用!

您可以尝试以下方法来运行多个 python 脚本:

  import os
  print "Starting script1"
  os.system("python script1.py arg1 arg2 arg3")
  print "script1 ended"
  print "Starting script2"
  os.system("python script2.py arg1 arg2 arg3")
  print "script2 ended"

注意:多个脚本的执行纯粹依赖于带下划线的操作系统,不会并发,我回答的时候是Python新手。

更新:我找到了一个包: https : //pypi.org/project/schedule/上面的包可以用来运行多个脚本和功能,请检查这个,也许周末也会提供一些例子。

IE:

 import schedule
 import time
 import script1, script2

 def job():
     print("I'm working...")

 schedule.every(10).minutes.do(job)
 schedule.every().hour.do(job)
 schedule.every().day.at("10:30").do(job)
 schedule.every(5).to(10).days.do(job)
 schedule.every().monday.do(job)
 schedule.every().wednesday.at("13:15").do(job)

 while True:
     schedule.run_pending()
     time.sleep(1)

暂无
暂无

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

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