繁体   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