在我的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)
我已经尝试过这么多,但是我无法处理它。 你有什么想法来解决这个问题吗?
答案 0 :(得分:1)
您应该将线程设置为daemon=True
。这样,如果主线程完成,线程将停止(例如在 Ctrl + C 情况下)。
在您启动线程后,在主脚本结束时,您将需要一个while threads are alive
循环,等待KeyboardInterrupt关闭主脚本(从而关闭线程)或自己关闭的线程(在某些更高版本的代码中可能)。
如果您需要进一步说明如何编写,请告诉我。您可以查看有关线程对象如何工作的Python文档{。{3}}。
更新:您可以阅读here中有关停止线程的信息。它可能是一个比我建议的更强大的解决方案。
答案 1 :(得分:0)
尝试使用 Ctrl + Shift + \
停止