我正在尝试用 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,您可以定义一个处理退出情况的函数,或者只是重新创建一个线程以从头开始。
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()
添加回答
举报
0/150
提交
取消