在Python中如何停止一个进程从另一个进程停止

2024-06-16 14:47:25 发布

您现在位置: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)

上述代码只是寻找一个按钮按下,一旦按钮按下,它触发停止闪烁功能,闪烁红色LED 20次。在

^{pr2}$

上面的代码只是在循环中闪烁一个蓝色的LED灯。在

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

现在,当我点击stopprink函数时,我希望它停止所有其他正在运行的进程,但是我似乎无法让它停止testRunning函数。我试着增加

sys.exit(1)

对stopbink函数,但它不影响其他函数的运行。在


Tags: 函数代码if进程defintdelayp2
1条回答
网友
1楼 · 发布于 2024-06-16 14:47:25

您可以使用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线程和进程的。在

相关问题 更多 >