Python 如何使用事件同步两个连续运行的线程?

Python 如何使用事件同步两个连续运行的线程?,python,events,synchronization,python-multithreading,Python,Events,Synchronization,Python Multithreading,我正试图根据thread2中的事件在thread1中运行几行。两个线程都在“while True”循环中持续运行。 问题是,我似乎无法仅在事件发生时运行所需的行 顺便说一句,两个线程都使用一个共享资源(列表),并且可以使用锁方法进行同步。这对我也不起作用 frames_list = [] new_frame = Event() result = 0 def thr1(): global frames_list global frames_list_max_size g

我正试图根据thread2中的事件在thread1中运行几行。两个线程都在“while True”循环中持续运行。 问题是,我似乎无法仅在事件发生时运行所需的行

顺便说一句,两个线程都使用一个共享资源(列表),并且可以使用锁方法进行同步。这对我也不起作用

frames_list = []
new_frame = Event()
result = 0


def thr1():
    global frames_list
    global frames_list_max_size
    global result
    while True:
        new_frame.set()
        result = result + 1
        new_frame.clear()


def thr2():
    global result
    while True:
        new_frame.wait()
        print(datetime.datetime.now())
        print(result)


threads = []
for func in [thr1, thr2]:
    threads.append(Thread(target=func))
    threads[-1].start()

for thread in threads:
    thread.join()
结果例如:

2019-10-19 22:35:34.150852
1710538
2019-10-19 22:35:34.173803
1722442
2019-10-19 22:35:34.197736
1737844
2019-10-19 22:35:34.214684
1740218
2019-10-19 22:35:34.220664
1749776
我希望: 1.每次打印之间的时间差为1秒。
2.每次打印的结果将增加1。

您不能使用一个
事件
对象来解决此问题,但可以使用两个
事件
对象来解决此问题:

  • 通知
    结果
    变量已更改
  • 通知
    结果
    变量的新值已被使用
  • 修改代码:

    导入时间
    框架列表=[]
    新帧=事件()
    新帧消耗=事件()
    结果=0
    def thr1():
    全局帧列表
    全局帧\u列表\u最大\u大小
    全球结果
    尽管如此:
    结果=结果+1
    时间。睡眠(1)
    新建_frame.set()
    新的\u帧\u已消耗。等待()
    新的\u帧\u已消耗。清除()
    def thr2():
    全球结果
    尽管如此:
    新建_frame.wait()
    新的_frame.clear()
    打印(datetime.datetime.now())
    打印(结果)
    新的_frame _consumered.set()
    线程=[]
    对于[thr1,thr2]中的func:
    附加(线程(目标=func))
    线程[-1]。开始()
    对于线程中的线程:
    thread.join()