簡體   English   中英

同時運行python腳本的問題

[英]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

使用subprocess.Popen 這將創建一個子進程並返回其pid。

pid = Popen("python 1.py").pid

然后檢查這些功能以與子進程通信並檢查其是否仍在運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM