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