无法再次调用的Python线程

时间:2018-12-20 12:14:59

标签: python-3.x multithreading

我正在尝试使用Python线程为IoT设备实现警报触发功能,但是在理解其逻辑方面存在问题。

我的情况:

我有一个传感器,可以向我发送运动和篡改触发器。因此,如果传感器检测到任何运动或篡改,则应触发警报器。

警报器位于我在单独的类中配置的GPIO端口上。警笛只有一个。

现在输入我的代码:

def siren(self):
    print("Turning on the siren")
    setGPIOvalue(<port>, <value>)


def triggeralarms(self,):       
    siren_trigger = threading.Thread(target=self.siren)

    if (alarmed == True):                    
    # Check for all the sensors if there is any alarms to be triggered
    for i in range(len(a.senList)):
            # Motion alarm
            if (motion == True):
                print("-----------------> Setting the motion alarm")                        
                if not siren_trigger.is_alive():
                    siren_trigger.start()
                    motion == False


            # Tamper alarm    
            if (tamper == True):
                print("-----------------> Setting the tamper alarm")
                if not siren_trigger.is_alive():
                    siren_trigger.start()
                    tamper == False

警笛中有10秒的延迟。

triggeralarms()函数会继续检查循环中的状态。

问题:

现在的问题是代码有时会触发GPIO进行运动和篡改。因此,运动和篡改都会创建一个线程来触发警报器。

我正在寻找的是以某种方式检查警笛线程是否已经在运行,然后应该再次启动它。

例如,如果运动传感器触发了警报器,并且我也收到了篡改触发器,那么如果警报器线程已经在运行,则篡改不应再次启动警报器线程。

我试图通过检查siren_trigger.is_alive()来解决问题,但似乎无法正常工作。 我在这里缺少逻辑。

0 个答案:

没有答案