У меня есть программа, которая должна запускать функцию «наблюдателя» в фоновом режиме, которая проверяет, совпадает ли время, указанное для объекта «тревога», с текущим временем, и если это так, запускает тревогу.Это функция:
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()
Я делаю синхронизацию неправильно?Даже после создания потока в основной программе он останавливает выполнение.