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