簡體   English   中英

如何在Python中停止一個進程

[英]how to stop one process from another in Python

在Raspberry Pi上,我正在運行兩個循環,這些進程不斷循環,直到觸發一個輸入停止其中一個進程但是如何停止這兩個進程? 唯一有效的是在控制台中按下control + c我現在無法用代碼停止它。

def stopButton():
while 1:
    wiringpi2.pinMode(52,0) 
    stopBut = wiringpi2.digitalRead(52)
    print (stopBut)
    wiringpi2.delay(500)
    if (stopBut == 0):
        stopBlink()

def stopBlink():
    redBlink = int(0)
    while (redBlink < int(20)):
        wiringpi2.digitalWrite(pin2,HIGH) 
        wiringpi2.delay(50)
        wiringpi2.digitalWrite(pin2,LOW)  
        wiringpi2.delay(50)
        redBlink += int(1)

上面的代碼只是按下按鈕,按下按鈕后它會觸發stopBlink功能,閃爍紅色LED 20次。

def testRunning():
while 1:
    wiringpi2.digitalWrite(pin3,HIGH) # Write HIGH to pin 2(U14 pin 2)
    wiringpi2.delay(1000)
    wiringpi2.digitalWrite(pin3,LOW)  # Write LOW to pin
    wiringpi2.delay(1000)

上面的代碼只是在一個循環中打開和關閉藍色LED。

if __name__ == '__main__':
try:
    P1 = Process(target = stopButton)
    P2 = Process(target = testRunning)
    P1.start()
    P2.start()
    P1.join()
    P2.join()

現在,當我點擊stopBlink函數時,我希望它停止所有其他正在運行的進程,但我似乎無法讓它停止testRunning函數。 我試過添加

sys.exit(1)

到stopBlink函數但它對運行的其他函數沒有影響。

您可以使用multiprocessing.Event進行進程間同步。

這是一個類似的例子:

from multiprocessing import Process, Event, Lock
from time import sleep

def wait(stop_event, lock):
    with lock:
        print "Waiting 2 s..."
    sleep(2)
    with lock:
        print "Stopping processes..."
    stop_event.set()

def loop(stop_event, lock):
    while not stop_event.is_set():
        with lock:
            print "Looping every 0.5 s..."
        sleep(0.5)

if __name__ == '__main__':
    stop_event, lock = Event(), Lock()
    wait_process = Process(target=wait, args=(stop_event, lock))
    loop_process = Process(target=loop, args=(stop_event, lock))
    wait_process.start(), loop_process.start()
    wait_process.join(), loop_process.join()

我不知道Raspberry Pi是否有特殊要求,但這是你如何以更通用的方式處理python線程和進程。

暫無
暫無

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

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