如何使用Python线程侦听事件

如何使用Python线程侦听事件,python,multithreading,Python,Multithreading,我试图用python实现一个多线程程序,但遇到了一些问题。 我试着设计一个程序,当程序(主线程)收到一个特定的命令时, 程序计数器将返回到上一个数字并继续倒计时 以下是我试图编写的代码: import threading import time count = 0 preEvent = threading.Event() runEvent = threading.Event() runEvent.set() preEvent.clear() def pre(): global cou

我试图用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在完成打印(计数)指令后被阻止,则当事件被清除时,t1将继续从计数+=1执行 因此,输出将如下所示

    1
    2
    3
    4
    pre
    4
    5
    ...
    
    我试图在互联网上查找信息,但我从来不知道如何添加关键字。 是否有一种方法或库可以实现此功能

    我已经尽力描述我的问题,但可能还不够好。如果我对我的问题有任何疑问,我可以补充更多的解释


    感谢大家耐心阅读我的问题

    线程模块有一个方法,将在调用或之前阻止。这将完成您在第一个问题中所寻找的内容。对于问题2,您可以定义一个处理退出情况的函数,也可以重新创建一个线程从开始开始