条件变量同步
有一类线程需要满足条件之后才能够继续执行,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] ........
上一篇
下一篇