为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Python线程监听事件

如何使用Python线程监听事件

倚天杖 2023-12-12 21:44:45
我正在尝试用 python 实现多线程程序,但遇到了麻烦。我尝试设计一个程序,当程序(主线程)接收到特定命令时,程序的计数器会返回到之前的数字并继续倒计数。以下是我尝试编写的代码:import threadingimport timecount = 0preEvent = threading.Event()runEvent = threading.Event()runEvent.set()preEvent.clear()def pre():    global count    while True:        if event.isSet():            count -= 1            event.clear()def doSomething():    global count    while True:        # if not runEvent.isSet():        #   runEvent.wait()        print(count)        count += 1        time.sleep(1)def main():    t1 = threading.Thread(target=pre, args=())    t2 = threading.Thread(target=doSomething, args=())    t1.start()    t2.start()    command = input("input command")    while command != 'quit':        command = input("input command")        if command == 'pre':            preEvent.set()main()但我遇到了一些问题如何在输入特定命令时同时阻止 t1如何在t1恢复时从头开始而不是从阻塞点开始关于问题1,我尝试在print(count)命令之前添加条件检查,但是如果我在程序输出count时输入“pre”命令,程序仍然会执行count+=1之后,程序会返回到检查条件并阻止t1,但这并没有达到我想要的同步效果。有办法实现这个目标吗?问题2与问题1类似。我希望每当我输入命令时,我的程序都会像这样输出。1234pre34...但如果t1在执行完print(count)指令后被阻塞,当事件清除后,t1将从count+=1开始继续执行,所以输出将变成以下1234pre45...我尝试在网上查找信息,但始终不知道如何添加关键字。有没有方法或库可以实现这个功能?我已尽力描述我的问题,但可能还不够好。如果我对我的问题有任何疑问,我可以添加更多解释。
查看完整描述

2 回答

?
天涯尽头无女友

TA贡献1831条经验 获得超9个赞

线程模块有一个等待方法,该方法将阻塞直到调用notify或notify_all 。这应该可以完成您在第一个问题中寻找的内容。对于问题 2,您可以定义一个处理退出情况的函数,或者只是重新创建一个线程以从头开始。



查看完整回答
反对 回复 2023-12-12
?
largeQ

TA贡献2039条经验 获得超7个赞

简单地说,它可以像这样工作,也许有帮助。


from threading import Thread, Event


count = 0

counter = Event()


def pre():


    global count

    counter.wait()

    count -= 1

    print(count)


def main():


    global count

    print(count)

    while True:

        command = input("Enter 1 to increase, Enter 2 to decrease :")

        if command == "1":

            t1 = Thread(target=pre, args=())

            t1.start()

            counter.set()

        else :

            count += 1

            print(count)



main()


查看完整回答
反对 回复 2023-12-12
  • 2 回答
  • 0 关注
  • 127 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信