条件变量同步
有一类线程需要满足条件之后才能够继续执行,Python提供了threading.Condition 对象用于条件变量线程的支持,它除了能提供RLock()或Lock()的方法外,还提供了 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] ........
上一篇
下一篇