[英]running two scripts simultaneously from a master script when each script has multiple threads within it in python
我想從一個master script
腳本同時運行兩個或多個 python 腳本。 這些腳本中的每一個都已經包含並行運行的線程。 例如我跑
腳本1.py
if __name__ == '__main__':
pid_vav = PID_VAV('B2')
t1 = threading.Thread(target=pid_vav.Controls)
t1.daemon = False
t1.start()
t2 = threading.Thread(target=pid_vav.mqttConnection)
t2.daemon = False
t2.start()
腳本2.py
if __name__ == '__main__':
pid_vav = PID_VAV('B4')
t1 = threading.Thread(target=pid_vav.Controls)
t1.daemon = False
t1.start()
t2 = threading.Thread(target=pid_vav.mqttConnection)
t2.daemon = False
t2.start()
我分別運行這個script1.py
和script2.py
。 唯一的區別是我傳遞給類的參數。 是否有可能有一個主腳本,如果我只運行它,這兩個腳本都會運行?
謝謝
假設您希望在運行主腳本時顯示兩個腳本的輸出。
可以利用subprocess
模塊調用python文件,也可以利用threading
模塊啟動單獨的線程
from threading import Thread
import subprocess
t1 = Thread(target=subprocess.run, args=(["python", "script1.py"],))
t2 = Thread(target=subprocess.run, args=(["python", "script2.py"],))
t1.start()
t2.start()
t1.join()
t2.join()
是的,ofc。
script_master.py:
from os import system
system('start script1.py && start script2.py')
但我認為您可以使用此代碼:
腳本_together.py:
if __name__ == '__main__':
todo=[]
todo.append(threading.Thread(target=lambda: PID_VAV('B2').Controls, daemon=False))
todo.append(threading.Thread(target=lambda: PID_VAV('B4').mqttConnection, daemon=False))
for th in todo:
th.start()
for th in todo:
th.join()
如果您想從主腳本觸發 2 個腳本,您可以使用以下方法。 它將幫助您將兩個腳本作為線程觸發,並且該線程還可以根據可調用腳本生成不同的線程。 您甚至可以讓腳本獨立運行。
import subprocess
pid1 = subprocess.Popen([sys.executable, "script1.py"])
pid2 = subprocess.Popen([sys.executable, "script2.py"])
如果您很高興將兩者的代碼保存在一個文件中,您可以使用多處理在不同的 CPU 內核上同時運行它們。
import multiprocessing as mp
from threading import Thread
def start_process(pid_vav_label):
pid_vav, threads = PID_VAV(pid_vav_label), []
threads.append(Thread(target=pid_vav.Controls))
threads.append(Thread(target=pid_vav.mqttConnection))
for thread in threads:
thread.start()
# Join if necessary
for thread in threads:
thread.join()
if __name__ == '__main__':
processes = []
for label in ['B2', 'B4']:
processes.append(mp.Process(target=start_process, args=(label,)))
processes[-1].start()
# Again, can join if necessary
for process in processes:
process.join()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.