Python同步队列正确应用方式解析

我们今天将会通过Python同步队列的相关介绍,来详细分析一下这一编程语言中的多线程应用。希望对此又需要的朋友们可以通过本文介绍的内容充分的掌握这一应用技巧,以方便将来的实际应用。#t#

成都创新互联专业为企业提供大柴旦网站建设、大柴旦做网站、大柴旦网站设计、大柴旦网站制作等企业网站建设、网页设计与制作、大柴旦企业网站模板建站服务,十多年大柴旦做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。

我们经常会采用生产者/消费者关系的两个线程来处理一个共享缓冲区的数据。例如一个生产者线程接受用户数据放入一个共享缓冲区里,等待一个消费者线程对数据 取出处理。但是如果缓冲区的太小而生产者和消费者两个异步线程的速度不同时,容易出现一个线程等待另一个情况。为了尽可能的缩短共享资源并以相同速度工作 的各线程的等待时间,我们可以使用一个“队列”来提供额外的缓冲区。

创建一个“队列”对象

 
 
 
  1. import Queue  
  2. myqueue = Queue.Queue(maxsize = 10)Queue.Queue 

类即是一个队列的同步实现。队列长度可为无限或者有限。可通过Queue的构造函数的可选参数maxsize来设定队列长度。如果maxsize小于1就表示队列长度无限。

将一个值放入队列中

 
 
 
  1. myqueue.put(10) 

调用队列对象的put()方法在队尾插入一个项目。put()有两个参数,第一个item为必需的,为插入项目的值;第二个block为可选参数,默认为1。如果队列当前为空且block为1,put()方法就使调用线程暂停,直到空出一个数据单元。如果block为0,put方法将引发Full异常。

将一个值从队列中取出

 
 
 
  1. myqueue.get() 

调用队列对象的get()方法从队头删除并返回一个项目。可选参数为block,默认为1。如果队列为空且block为1,get()就使调用线程暂停,直至有项目可用。如果block为0,队列将引发Empty异常。

我们用一个Python同步队列例子来展示如何使用Queue# queue_example.py

 
 
 
  1. from Queue import Queue  
  2. import threading  
  3. import random  
  4. import time  
  5. # Producer thread  
  6. class Producer(threading.Thread):  
  7. def __init__(self, threadname, queue):  
  8. threading.Thread.__init__(self, name = threadname)  
  9. self.sharedata = queue 
  10. def run(self):  
  11. for i in range(20):  
  12. print self.getName(),’adding’,i,’to queue’  
  13. self.sharedata.put(i)  
  14. time.sleep(random.randrange(10)/10.0)  
  15. print self.getName(),’Finished’  
  16. # Consumer thread  
  17. class Consumer(threading.Thread):  
  18. def __init__(self, threadname, queue):  
  19. threading.Thread.__init__(self, name = threadname)  
  20. self.sharedata = queue 
  21. def run(self):  
  22. for i in range(20):  
  23. print self.getName(),’got a value:’,self.sharedata.get()  
  24. time.sleep(random.randrange(10)/10.0)  
  25. print self.getName(),’Finished’  
  26. # Main thread  
  27. def main():  
  28. queue = Queue()  
  29. producer = Producer(’Producer’, queue)  
  30. consumer = Consumer(’Consumer’, queue)  
  31. print ‘Starting threads …’  
  32. producer.start()  
  33. consumer.start()  
  34. producer.join()  
  35. consumer.join()  
  36. print ‘All threads have terminated.’  
  37. if __name__ == ‘__main__’:  
  38. main() 

Python同步队列示例代码中实现了两个类:生产者类Producer和消费者类Consumer。前者在一个随机的时间内放入一个值到队列queue中然后显示出来,后者在一定随机的时间内从队列queue中取出一个值并显示出来。

文章题目:Python同步队列正确应用方式解析
标题路径:http://www.gawzjz.com/qtweb2/news36/9486.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联