使用python中的线程打开风扇

时间:2018-12-02 09:05:42

标签: python

我有这段代码,在其中我将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()

我该如何解决?预先感谢。

2 个答案:

答案 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)