我遇到了一些问题,到目前为止,我的许多测试/搜索都让我无处可去。
我有一个Flask应用程序,为在树莓派上运行的小型警报系统提供GUI。 GUI允许启动警报(目前GPIO引脚上的运动传感器)作为后台进程。运行正常,如果检测到它发送电子邮件。 我正在尝试添加一种会发出警笛声的方法(或100分贝的黑金属歌曲,尚未决定:p)。 方法本身在一个类中并且工作正常,我可以从GUI激活/停用它作为另一个后台进程。
但是,我无法通过警报程序自动触发它。不知道为什么,我没有错误,它只是不解雇:
class Alarm(Process):
def __init__(self):
super().__init__()
self.exit = Event()
def shutdown(self):
self.exit.set()
def run(self):
Process.__init__(self)
#code
#if motion detected sendmail, and run the siren:
siren = Siren() #actually, problem here: I need to import the class
#and declare this in the main Flask app file, so as
#to be able to control it from the GUI. Apparently I
#can't declare it in both python files (sounds
#obvious though)
siren.start()
#then keep looping
和Siren类相似:
class Siren(Process):
def __init__(self):
super().__init__()
def run(self):
Process.__init__(self)
#code using pyaudio
我猜我对类和方法的基本理解是罪魁祸首。
我也尝试过使用事件,所以我没有使用siren.start()
和e = Event()
来代替e.set()
,但是我无法在后台运行Siren类。让它用e.wait()
选择该事件。
任何人都可以指出我正确的方向吗?
谢谢!
答案 0 :(得分:0)
您不应该从Process.__init__
致电Alarm.run
!您已经在Alarm.__init__
Process.__init__(self)
与super().__init__()
<强>更新强>
这有用吗:
import threading
import time
class Alarm(threading.Thread):
def run(self):
#code
#if motion detected sendmail, and run the siren:
siren = Siren() #actually, problem here: I need to import the class
#and declare this in the main Flask app file, so as
#to be able to control it from the GUI. Apparently I
#can't declare it in both python files (sounds
#obvious though)
siren.start()
#then keep looping
for x in range(20):
print ".",
time.sleep(1)
siren.term()
siren.join()
class Siren(threading.Thread):
def run(self):
self.keepRunning=True;
while self.keepRunning:
print "+",
time.sleep(1)
def term(self):
self.keepRunning=False
if __name__ == '__main__':
alarm = Alarm()
alarm.run()
输出:
+. + . .+ . + +. +. . + . + . + . + + . + . + . + . + . + . + . + . +. +. +