代码之家  ›  专栏  ›  技术社区  ›  Jackson_DKMG

Python:从后台进程启动后台进程

  •  0
  • Jackson_DKMG  · 技术社区  · 7 年前

    我有点问题,我的很多测试/搜索到目前为止都没有结果。

    GUI允许启动警报(目前在GPIO引脚上的运动传感器)作为后台进程。这运行正常,如果检测到,它会发送一封电子邮件。 我正在尝试添加一种方法,可以播放警笛声(或100 db的黑色金属歌曲,尚未决定: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
    

    警报器等级类似:

    class Siren(Process):
        def __init__(self):
            super().__init__()
    
        def run(self):
    
            Process.__init__(self)
    
            #code using pyaudio
    

    我也尝试过使用事件,所以 siren.start() 我想要一些类似的 e = Event() e.set() e.wait() .

    有人能给我指出正确的方向吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   shrewmouse    7 年前

    你不应该打电话 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()
    

    +. + . .+ . + +. +. . + . + . + . + + . + . + . + . + . + . + . + . +. +. +