[英]Issues with python scripts running simultaneously
我有兩個Python腳本,它們針對正在處理的項目使用兩個不同的攝像頭,並且試圖在不同的腳本中或彼此之間運行它們,無論哪種方式都很好。
import os
os.system('python 1.py')
os.system('python 2.py')
但是,我的問題是它們不能同時運行,我必須退出第一個才能打開下一個。 我也嘗試使用bash以及&shell運算符
python 1.py &
python 2.py &
實際上,這確實使它們都運行,但是問題是,它們都在后台無休止地運行,因此我需要相當輕松地關閉它們。 任何建議我可以做些什么來避免這些實現的問題
您可以通過多處理來做到這一點
import os
import time
import psutil
from multiprocessing import Process
def run_program(cmd):
# Function that processes will run
os.system(cmd)
# Initiating Processes with desired arguments
program1 = Process(target=run_program, args=('python 1.py',))
program2 = Process(target=run_program, args=('python 2.py',))
# Start our processes simultaneously
program1.start()
program2.start()
def kill(proc_pid):
process = psutil.Process(proc_pid)
for proc in process.children(recursive=True):
proc.kill()
process.kill()
# Wait 5 seconds and kill first program
time.sleep(5)
kill(program1.pid)
program1.join()
# Wait another 1 second and kill second program
time.sleep(1)
kill(program2.pid)
program2.join()
# Print current status of our programs
print('1.py alive status: {}'.format(program1.is_alive()))
print('2.py alive status: {}'.format(program2.is_alive()))
一種可能的方法是使用systemd
控制您的進程(即將它們視為守護程序)。
這是我控制我的Python服務器的方式,因為它們需要在后台運行並與當前tty
完全分離,以便退出與計算機的連接,並繼續執行繼續過程。 然后,您也可以稍后使用systemctl
停止服務器,如下所述。
說明:
創建一個.service
文件並將其保存在/etc/systemd/system
,其內容如下:
[Unit]
Description=daemon one
[Service]
ExecStart=/path/to/1.py
並重復一遍2.py
然后,您可以使用systemctl
來控制守護程序。
首先使用以下命令重新加載所有配置文件:
systemctl daemon-reload
然后啟動您的兩個守護程序(其中my_daemon.service
是您的單元文件之一):
systemctl start my_daemon
它現在應該正在運行,您應該在以下位置找到它:
systemctl list-units
您還可以使用以下方法檢查其狀態:
systemctl status my_daemon
並使用以下命令stop
/ restart
它們:
systemctl stop|restart my_daemon
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.