Python如何实现条件变量同步
发布时间:2025-10-12 17:50:30

条件变量同步
Python提供threading后,有一种线程需要满足条件才能继续执行。.Condition 对象用于支持条件变量线程,它不仅提供RLock()或Lock()的方法,还提供RLock() wait()、notify()、notifyAll()方法。
lock_con=threading.Condition([Lock/Rlock]): 锁是可选的选项,不传人锁,对象自动创建RLock()。
wait():当条件不满足时,调用线程释放锁并进入等待堵塞;
notify():条件创建后调用,通知等待池激活一个线程;
notifyAll():创建条件后,通知等待池激活所有线程。
相关推荐:Python视频教程
importthreading,time
fromrandomimportrandint
classProducer(threading.Thread):
defrun(self):
globalL
whileTrue:
val=randint(0,100)
print('生产者',self.name,':Append'+str(val),L)
iflock_con.acquire():
L.append(val)
lock_con.notify()
lock_con.release()
time.sleep(3)
classConsumer(threading.Thread):
defrun(self):
globalL
whileTrue:
lock_con.acquire()
iflen(L)==0:
lock_con.wait()
print('消费者',self.name,":Delete"+str(L[0]),L)
delL[0]
lock_con.release()
time.sleep(0.25)
if__name__=="__main__":
L=[]
lock_con=threading.Condition()
threads=[]
foriinrange(5):
threads.append(Producer())
threads.append(Consumer())
fortinthreads:
t.start()
fortinthreads:
t.join()
print('----end----')运行结果:
生产者Thread-1:Append63[] 生产者Thread-2:Append66[63] Thread-3:Append20[63,66] 生产者Thread-4:Append83[63,66,20] 生产者Thread-5:Append2[63,66,20,83] 生产者Thread-4:Append26[] Thread-6消费者:Delete26[26] 生产者Thread-2:Append21[] Thread-3:Append71[21] 生产者Thread-1:Append19[21,71] 生产者Thread-5:Append100[21,71,19] 生产者Thread-1:Append96[] Thread-6消费者:delete96[96] ...
下一篇 Python中元祖的用法
