Python 如何使用事件同步两个连续运行的线程?
我正试图根据thread2中的事件在thread1中运行几行。两个线程都在“while True”循环中持续运行。 问题是,我似乎无法仅在事件发生时运行所需的行 顺便说一句,两个线程都使用一个共享资源(列表),并且可以使用锁方法进行同步。这对我也不起作用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
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()