最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

pythonCondition对象之生产者与消费者操作的代码实例

来源:动视网 责编:小采 时间:2020-11-27 14:14:59
文档

pythonCondition对象之生产者与消费者操作的代码实例

pythonCondition对象之生产者与消费者操作的代码实例:这篇文章主要介绍了python条件变量之生产者与消费者操作,结合具体实例形式分析了Python条件变量的概念、原理、及线程操作的相关技巧,需要的朋友可以参考下本文实例讲述了python条件变量之生产者与消费者操作。分享给大家供大家参考,具体如下:互斥锁是最简单
推荐度:
导读pythonCondition对象之生产者与消费者操作的代码实例:这篇文章主要介绍了python条件变量之生产者与消费者操作,结合具体实例形式分析了Python条件变量的概念、原理、及线程操作的相关技巧,需要的朋友可以参考下本文实例讲述了python条件变量之生产者与消费者操作。分享给大家供大家参考,具体如下:互斥锁是最简单
 这篇文章主要介绍了python条件变量之生产者与消费者操作,结合具体实例形式分析了Python条件变量的概念、原理、及线程操作的相关技巧,需要的朋友可以参考下

本文实例讲述了python条件变量之生产者与消费者操作。分享给大家供大家参考,具体如下:

互斥锁是最简单的线程同步机制,面对复杂线程同步问题,Python还提供了Condition对象。Condition被称为条件变量,除了提供与Lock类似的acquire和release方法外,还提供了wait和notify方法。线程首先acquire一个条件变量,然后判断一些条件。如果条件不满足则wait;如果条件满足,进行一些处理改变条件后,通过notify方法通知其他线程,其他处于wait状态的线程接到通知后会重新判断条件。不断的重复这一过程,从而解决复杂的同步问题。

可以认为Condition对象维护了一个锁(Lock/RLock)和一个waiting池。线程通过acquire获得Condition对象,当调用wait方法时,线程会释放Condition内部的锁并进入blocked状态,(但实际上不会block当前线程)同时在waiting池中记录这个线程。当调用notify方法时,Condition对象会从waiting池中挑选一个线程,通知其调用acquire方法尝试取到锁。

Condition对象的构造函数可以接受一个Lock/RLock对象作为参数,如果没有指定,则Condition对象会在内部自行创建一个RLock。

线程同步经典问题----生产者与消费者问题可以使用条件变量轻松解决。

import threading
import time
class Producer(threading.Thread):
 def init(self):
 threading.Thread.init(self)
 def run(self):
 global count
 while True:
 con.acquire()
 if count <20:
 count += 1
 print self.name," Producer product 1,current is %d" %(count)
 con.notify()
 else:
 print self.name,"Producer say box is full"
 con.wait()
 con.release()
 time.sleep(1)
class Consumer(threading.Thread):
 def init(self):
 threading.Thread.init(self)
 def run(self):
 global count
 while True:
 con.acquire()
 if count>4:
 count -=4
 print self.name,"Consumer consume 4,current is %d" %(count)
 con.notify()
 else:
 con.wait()
 print self.name," Consumer say box is empty"
 con.release()
 time.sleep(1)
count = 0
con = threading.Condition()
def test():
 for i in range(1):
 a = Consumer()
 a.start()
 for i in range(1):
 b =Producer()
 b.start()
if name=='main':
 test()

上面的代码假定消费者消费的比较快,输出结果为:

文档

pythonCondition对象之生产者与消费者操作的代码实例

pythonCondition对象之生产者与消费者操作的代码实例:这篇文章主要介绍了python条件变量之生产者与消费者操作,结合具体实例形式分析了Python条件变量的概念、原理、及线程操作的相关技巧,需要的朋友可以参考下本文实例讲述了python条件变量之生产者与消费者操作。分享给大家供大家参考,具体如下:互斥锁是最简单
推荐度:
标签: 对象 实例 消费者
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top