Python调度程序块中断

Python调度程序块中断,python,raspberry-pi,scheduling,gpio,Python,Raspberry Pi,Scheduling,Gpio,我用一个基于覆盆子的系统来控制一些东西。目前,我只是通过打开和关闭led来测试它 我的计划是:按下按钮打开阀门。再次按下按钮可将其关闭-但如果未按下按钮,请在设定时间后将其关闭。我当前的脚本如下:(我知道这不会在第二次按下时关闭led) 如果我按下按钮,然后不动,led将在10秒后熄灭。但是,如果我立即再次按下按钮,在调度程序完成之前不会发生任何事情,则会注册一个新的按钮。我原以为调度程序是在后台旋转的,所以当我再次按下按钮时,回调会再次运行,因此我会收到“button was pushed”(

我用一个基于覆盆子的系统来控制一些东西。目前,我只是通过打开和关闭led来测试它

我的计划是:按下按钮打开阀门。再次按下按钮可将其关闭-但如果未按下按钮,请在设定时间后将其关闭。我当前的脚本如下:(我知道这不会在第二次按下时关闭led)

如果我按下按钮,然后不动,led将在10秒后熄灭。但是,如果我立即再次按下按钮,在调度程序完成之前不会发生任何事情,则会注册一个新的按钮。我原以为调度程序是在后台旋转的,所以当我再次按下按钮时,回调会再次运行,因此我会收到“button was pushed”(按钮已按下)消息(之后发生的所有事情都不会产生任何影响,因为GPIO 18已经很高,计划的关机呼叫将在关机运行后发生

有没有可能使用sched库来做我想做的事情,或者我必须使用其他一些技术?我知道我可以用简单的方法来做,通过循环寻找一个按下的按钮而不是注册回调,或者可能是一种更复杂的方法,通过创建一个新线程,在给定的时间后将GPIO拉下来-但是有什么方法吗我在sched中还没有理解的东西,或者是否有其他库提供了我想要的东西——一种告诉python在未来做一些事情而不干扰其他事情的方法


(我不需要非常精确的计时——而且,这只是我打算制造更复杂控制系统的一部分,我使用arduino实现了我想要的功能,但这将限制进一步的开发)

多亏@stovfl的提示,我重新编写了代码的第一部分:

import time,threading

def button_callback(channel):
   pin=18
   print("Button was pushed!")
   print(time.time())
   GPIO.output(pin,GPIO.HIGH)
   t = threading.Timer(10.0, turnoff)
   t.start() 

它的工作原理与我想要的一样

我没有使用
sched
,但我会尝试取消任何排队事件:阅读
import time,threading

def button_callback(channel):
   pin=18
   print("Button was pushed!")
   print(time.time())
   GPIO.output(pin,GPIO.HIGH)
   t = threading.Timer(10.0, turnoff)
   t.start()