Как мне установить и очистить Событие из одного потока, чтобы он работал в моем втором потоке? - PullRequest
0 голосов
/ 29 апреля 2019

У меня сейчас 2 темы. Нужно определить, когда другой сможет бежать или нет. Идеальным сценарием является проверка первого потока на наличие некоторого сигнала, и, если этого достаточно, он устанавливает событие так, чтобы мой второй поток мог выполнять свою работу в течение определенного промежутка времени. После этого я хочу, чтобы первый поток вернулся к своей работе, и все повторяется снова.

Я бегу за решением, чтобы сделать это возможным, поэтому сейчас я пробую что-то с помощью threading.Event (). Я уже пробовал с блокировками и очередями, но я считаю, что событие - лучшее решение для меня.

поточно-1-код частей:

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)

поточно-2-кодовая часть:

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 (), но ничего не происходит. Таким образом, мой код выполняет только первый поток, событие, если событие установлено, мой второй не запускается. Я также не уверен, должен ли я использовать event.clear () из моего первого потока через x секунд, или мне следует очистить второй поток после выполнения того, что он должен делать.

@ edit: я использую класс для установки обоих потоков, и я начинаю и присоединяюсь к ним обоим.

Спасибо за ваше время!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...