线程暂停程序执行

时间:2018-12-23 12:39:49

标签: python multithreading python-multithreading

我有一个程序,该程序必须在后台运行“观察者”功能,该程序检查“警报”对象上指定的时间是否等于当前时间,如果是,则触发警报。这是功能:

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()

我同步做错了吗?甚至在主程序上实例化线程后,它就会停止执行。

0 个答案:

没有答案