我有这段代码,在其中我将fan_on方法与线程一起使用
def fan_on():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
FAN_PIN = 23
GPIO.setup(FAN_PIN,GPIO.OUT)
GPIO.output(FAN_PIN,True)
t = Thread(target=sleep_fan)
t.daemon = True
t.start()
return t
def sleep_fan():
time.sleep(5)
当我尝试致电
时fan_on()
风扇在达到5秒之前先关闭
当我尝试使用join()方法
fan_thead = fan_on()
fan_thread.join()
整个脚本都死了,这是个问题
当风扇螺纹打开时,我也将此代码称为
if args["alarm"] != "":
t = Thread(target=sound_alarm,
args=(args["alarm"],))
t.daemon = True
t.start()
我该如何解决?预先感谢。
答案 0 :(得分:4)
您需要使线程成为非守护程序。这将使您的脚本直到退出sleep_fan
线程终止(即至少持续五秒钟)后:
t.daemon = False
(这是默认设置。)
有关更多信息,请参见:
答案 1 :(得分:2)
与您的代码等效的代码将是
def fan_on():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
FAN_PIN = 23
GPIO.setup(FAN_PIN,GPIO.OUT)
GPIO.output(FAN_PIN,True)
//waiting code runs in other thread does not wait in this thread
编写睡眠的函数并将其作为线程调用对我来说没有意义。 我认为可以通过类似的方式获得所需的输出
def fan_on():
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
FAN_PIN = 23
GPIO.setup(FAN_PIN,GPIO.OUT)
GPIO.output(FAN_PIN,True)
time.sleep(5)