RaspberryPi:使用Ctrl-C停止线程

时间:2018-03-23 09:28:03

标签: python multithreading raspberry-pi gpio

在我的Raspberry Pi上,我有这个代码让LEDS以不同的赫兹频率闪烁。 一切正常,但我不能用 ctrl + C 来阻止它。

#!/usr/bin/python
import RPi.GPIO as GPIO
import time
from threading import Thread

GPIO.setmode(GPIO.BOARD)
GPIO.setup(32, GPIO.IN)
    #LED Blinking Function
    def blink(port, hz):
        GPIO.setup(port, GPIO.OUT)
        pulse = 0.5/hz
        dtm = time.time()

        while True:
            dtm+= pulse
            time.sleep(dtm - time.time())

            if GPIO.input(32) == 1:

                GPIO.output(port, not GPIO.input(port))

            else:
                GPIO.output(port, GPIO.LOW)

    #to make it easier to add new LED
    def start(port, hz):
    Thread(target=blink, args=(port, hz)).start()

#to add LED insert start(GPIOport, Hz)
start(15, 2)
start(16, 2)
start(18, 2)
start(22, 2)
start(29, 2)

我已经尝试过这么多,但是我无法处理它。 你有什么想法来解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您应该将线程设置为daemon=True。这样,如果主线程完成,线程将停止(例如在 Ctrl + C 情况下)。

在您启动线程后,在主脚本结束时,您将需要一个while threads are alive循环,等待KeyboardInterrupt关闭主脚本(从而关闭线程)或自己关闭的线程(在某些更高版本的代码中可能)。

如果您需要进一步说明如何编写,请告诉我。您可以查看有关线程对象如何工作的Python文档{。{3}}。

更新:您可以阅读here中有关停止线程的信息。它可能是一个比我建议的更强大的解决方案。

答案 1 :(得分:0)

尝试使用 Ctrl + Shift + \

停止