在python中使用线程打开风扇

在python中使用线程打开风扇,python,Python,我有这样一段代码,我在其中使用方法fan_on with 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) t = Thread(target=sleep_fan) t.daemon = True t.start(

我有这样一段代码,我在其中使用方法fan_on with 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)
    t = Thread(target=sleep_fan)
    t.daemon = True
    t.start()
    return t

def sleep_fan():
    time.sleep(5)
当我试着打电话给

fan_on()
风扇在达到5秒钟前关闭

当我尝试使用join()方法时

整个脚本处于休眠状态,这是一个问题

当风扇线程打开时,我也调用此代码

if args["alarm"] != "":
    t = Thread(target=sound_alarm,
        args=(args["alarm"],))
    t.daemon = True
    t.start()

我怎样才能解决这个问题?提前感谢。

将提供与您的代码等效的代码

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)

您需要使线程成为非守护进程。这将使您的脚本在退出
sleep\u fan
线程终止(即至少五秒钟)之前:

(这是默认设置。)

有关详细信息,请参阅:


您需要简要说明问题。当fan_线程处于睡眠状态时,程序应该做什么?编辑过的先生……如果您真的希望它是一个永无止境的程序,只需将主线程包装在一个无限循环中,将子线程作为守护进程,并等待用户命令。老实说,我还是不明白你计划的实质。如果没有这些,每个人都会抛出一些假设和可能的解决方案。我尝试使用它,但风扇在达到5 scs之前关闭。请确保脚本的其他部分不会重新配置或写入
风扇PIN
。先生,您能试着回答这个问题吗?谢谢。
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)
t.daemon = False