Поток останавливает выполнение программы - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть программа, которая должна запускать функцию «наблюдателя» в фоновом режиме, которая проверяет, совпадает ли время, указанное для объекта «тревога», с текущим временем, и если это так, запускает тревогу.Это функция:

def watcher(this):
    while this.run:
        this.lock.acquire(True)
        for i , a in enumerate(this.alarms):
            if a.activate:
                if a.repeat:              
                    if a.dateTime.minute + (a.dateTime.hour*60) == datetime.datetime.now().minute + (datetime.datetime.now().hour*60):
                        this.trigger(i)
                        while True:
                            if keyboard.is_pressed('a'):
                                this.stop()
                                break

                elif a.dateTime.date() == datetime.datetime.now().date() and a.dateTime.minute + a.dateTime.hour*60 == datetime.datetime.now().minute + datetime.datetime.now().hour*60:
                        this.trigger(i)
                        while True:
                            if keyboard.is_pressed('a'):
                                this.stop()
                                break
        this.lock.release()

Объект блокировки был создан ранее внутри класса, в котором находится эта функция. Он работает, когда я запускаю его в программе, где я заранее установил сигналы тревоги, но когда мне нужно запуститьдругая программа, которая управляет аварийными сигналами, другая программа зависает и запускается только эта.

Здесь часть основной программы:

import alarms
import datetime
import manager
import threading
import keyboard

lock = threading.Lock()
mngr = manager.manager()
print("Program Test")
tr = threading.Thread(target = mngr.watcher)
tr.start()
while True:

    command = input()

    if len(command) == 0:
        print('')
elif command.split()[0] == "rem":
        lock.acquire(True)
        try:
            mngr.remove_alarm(int(command.split()[1]) - 1)
        except IndexError as excp:
            print('Invalid alarm number. Use the command "list" to get alarms')
        except Exception as excp:
            print('Wrong usage of command: use like this: rem {alarmNumber}')
            print('DEBUG: ' + str(excp))
        finally:
            lock.release()

Я делаю синхронизацию неправильно?Даже после создания потока в основной программе он останавливает выполнение.

...