我应该如何设置和清除一个线程中的事件以在第二个线程中进行提示?

时间:2019-04-29 16:05:12

标签: python multithreading events thread-safety

我现在有2个线程。一个必须定义另一个何时可以运行。理想的情况是第一个线程检查某些信号,如果足够,它将设置事件,以便我的第二个线程可以在定义的时间间隔内完成其工作。之后,我希望第一个线程返回其工作,然后再次重复所有操作。

我正在寻找一种解决方案来实现这一目标,因此我现在正在尝试使用threading.Event()。我已经尝试过使用锁和队列,但是我相信该事件对我来说是最合适的解决方案。

thread-1-code-part:

ser.write(str.encode('AT+CSQ\r'))
            time.sleep(20)
            if (z.startswith("+CSQ")):
                a = int(z[5])
                if a >= 3:
                    trigger.set()
                    print('Qualidade do sinal', z[5], 'é suficiente')
                    print('Trigger = ', trigger.isSet())
                    trigger.clear()
                    time.sleep(20)
                    print('Trigger = ', trigger.isSet())

                else:
                    print('Buscando Sinal...')
                    time.sleep(0.5)

thread-2-code-part:

if trigger.is_set():

            print('Pós Trigger')

            while True:
                q = ser.readline()
                w = q.rstrip()
                e = w.decode('utf-8')
                if (e == 'SBDRING'):
                    print ('Ring Alert recebido')
                    ser.write(str.encode('AT+SBDIX\r'))
                    time.sleep(5)
                    ser.write(str.encode('AT+SBDRT\r'))
                    time.sleep(2)
                    assist_var = 0
                    lista = []
                    while len(lista) < 12:
                        u = ser.readline()
                        i = u.rstrip()
                        o = i.decode('utf-8')
                        if len(o) > 1 :
                            lista.append(o)
                            assist_var = assist_var + 1
                           #print(lista)
                           #print('assist_var = ', assist_var)
                        if assist_var == 7:
                            print('Você recebeu :', lista[5])

我已经尝试使用trigger.wait(),但是什么也没有发生。这样,我的代码仅运行第一个线程,如果设置了事件,则运行一个事件,而我的第二个线程则无法启动。我也不确定是否应该在x秒后从我的第一个线程中删除event.clear(),还是应该在完成应做的事情后从第二个线程中删除。

@edit:我正在使用类来设置两个线程,并且正在启动和加入这两个线程。

感谢您的时间!

0 个答案:

没有答案