当前位置: 网学 > 编程文档 > 其他类别 > 正文

Python多线程学习

来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 13/08/01
程同步的支持。使用Queue对象可以实现多个生产者和多个消费者形成的FIFO的队列。  生产者将数据依次存入队列,消费者依次从队列中取出数据。  view plaincopy to clipboardprint?  # producer_consumer_queue  from Queue import Queue  import random  import threading  import time  #Producer thread  class Producer(threading.Thread):  def __init__(self, t_name, queue):  threading.Thread.__init__(self, name=t_name)  self.data=queue  def run(self):  for i in range(5):  print "%s: %s is producing %d to the queue!" %(time.ctime(), self.getName(), i)  self.data.put(i)  time.sleep(random.randrange(10)/5)  print "%s: %s finished!" %(time.ctime(), self.getName())  #Consumer thread  class Consumer(threading.Thread):  def __init__(self, t_name, queue):  threading.Thread.__init__(self, name=t_name)  self.data=queue  def run(self):  for i in range(5):  val = self.data.get()  print "%s: %s is consuming. %d in the queue is consumed!" %(time.ctime(), self.getName(), val)  time.sleep(random.randrange(10))  print "%s: %s finished!" %(time.ctime(), self.getName())  #Main thread  def main():  queue = Queue()  producer = Producer('Pro.', queue)  consumer = Consumer('Con.', queue)  producer.start()  consumer.start()  producer.join()  consumer.join()  print 'All threads terminate!'  if __name__ == '__main__':  main()  在上面的例子中,Producer在随机的时间内生产一个“产品”,放入队列中。Consumer发现队列中有了“产品”,就去消费它。本例中,由于Producer生产的速度快于Consumer消费的速度,所以往往Producer生产好几个“产品”后,Consumer才消费一个产品。  Queue模块实现了一个支持多producer和多consumer的FIFO队列。当共享信息需要安全的在多线程之间交换时,Queue非常有用。Queue的默认长度是无限的,但是可以设置其构造函数的maxsize参数来设定其长度。Queue的put方法在队尾插入,该方法的原型是:put( item[, block[, timeout]])  如果可选参数block为true并且timeout为None(缺省值),线程被block,直到队列空出一个数据单元。如果timeout大于0,在timeout的时间内,仍然没有可用的数据单元,Full exception被抛出。反之,如果block参数为false(忽略timeout参数),item被立即加入到空闲数据单元中,如果没有空闲数据单元,Full exception被抛出。  Queue的get方法是从队首取数据,其参数和put方法一样。如果block参数为true且timeout为None(缺省值),线程被block,直到队列中有数据。如果timeout大于0,在timeout时间内,仍然没有可取数据,Empty exception被抛出。反之,如果block参数为false(忽略timeout参数),队列中的数据被立即取出。如果此时没有可取数据,Empty exception也会被抛出。

  • 上一篇资讯: 深度浅析Python开发过程
  • 下一篇资讯: Python全文搜索引擎 Hypy
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号