我正在尝试用 python 实现多线程程序,但遇到了麻烦。我尝试设计一个程序,当程序(主线程)接收到特定命令时,程序的计数器会返回到之前的数字并继续倒计数。
以下是我尝试编写的代码:
import threading
import time
count = 0
preEvent = 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类似。我希望每当我输入命令时,我的程序都会像这样输出。
1
2
3
4
pre
3
4
...
但如果t1在执行完print(count)指令后被阻塞,当事件清除后,t1将从count+=1开始继续执行,所以输出将变成以下
1
2
3
4
pre
4
5
...
我尝试在网上查找信息,但始终不知道如何添加关键字。有没有方法或库可以实现这个功能?
我已尽力描述我的问题,但可能还不够好。如果我对我的问题有任何疑问,我可以添加更多解释。
天涯尽头无女友
largeQ
相关分类