Python:线程回调不使用守护进程模式?

Python:线程回调不使用守护进程模式?,python,multithreading,daemon,Python,Multithreading,Daemon,我是Python新手。 我有一个线程回调代码在我的raspi上运行良好 将RPi.GPIO导入为GPIO GPIO.setmode(GPIO.BCM) 导入时间 从守护程序导入运行程序 GPIO.setup(23,GPIO.IN,上拉下=GPIO.PUD下拉)#浮动开关下降(关闭至打开)=>低水位 GPIO.setup(24,GPIO.IN,向上拉=向上拉=向上拉=向上拉=向上拉=浮球开关向上(打开至关闭)=>高水位 def回调_低电平(通道): 如果GPIO.input(通道): 打印“检测到

我是Python新手。 我有一个线程回调代码在我的raspi上运行良好

将RPi.GPIO导入为GPIO
GPIO.setmode(GPIO.BCM)
导入时间
从守护程序导入运行程序
GPIO.setup(23,GPIO.IN,上拉下=GPIO.PUD下拉)#浮动开关下降(关闭至打开)=>低水位
GPIO.setup(24,GPIO.IN,向上拉=向上拉=向上拉=向上拉=向上拉=浮球开关向上(打开至关闭)=>高水位
def回调_低电平(通道):
如果GPIO.input(通道):
打印“检测到集水坑水位低”
其他:
打印“集水坑水位恢复正常”
def回调_高电平(通道):
如果GPIO.input(通道):
打印“检测到集水坑水位高”
其他:
打印“集水坑水位恢复正常”
GPIO.add\u event\u detect(23,GPIO.BOTH,callback=callback\u lowlevel,bouncetime=1000)
GPIO.add\u event\u detect(24,GPIO.BOTH,callback=callback\u highlevel,bouncetime=1000)
如果我像这样开始一个无限循环:

试试看:
打印“等待事件”
尽管如此:
时间。睡眠(1)
除键盘中断外:
GPIO.cleanup()#在CTRL+C退出时清除GPIO
GPIO.cleanup()#在正常退出时清理GPIO
它起作用了

但是如果我用守护程序库“守护”它,我的线程回调就不再工作了

class-App():#守护进程内容,不做太多,主要是睡眠,以降低CPU占用
定义初始化(自):
self.stdin_path='/dev/null'
self.stdout_path='/dev/stdout'
self.stderr_path='/dev/stdout'
self.pidfile_path='/var/run/aquamonitor.pid'
self.pidfile_超时=5
def运行(自):
记录器(“启动监控”)
尽管如此:
时间。睡眠(1)#大部分时间都要睡眠,以免占用太多CPU
app=app()#初始化应用程序
daemon_runner=runner.DaemonRunner(应用程序)#作为守护程序运行
daemon_runner.do_action()#就这么做吧

我做错了什么?它是一个守护进程这一事实是否会改变我编写线程回调的方式?

我也有同样的问题,我认为我将回调注册到了错误的线程。因此,长话短说,请确保在循环之前从应用程序类的run方法中调用GPIO.add_event_detect。

您是否尝试了其他进程后台监控方法?…例如
os.fork
是否通过此
self.pidfile_path='/var/run/aquamonitor.pid'
对进程进行后台监控?您好,对不起,迟了答复。不,我只是尝试了守护进程库。守护进程本身由守护进程运行程序启动。