Threading生产消费模型

说明:

  • 队列:
    队列类似一条管道,元素put(进),get(出)
    队列都是在内存中操作,进程退出,队列情况,且队列是阻塞形态

  • 队列分类:
    python队列依赖Queue模块

队列 方式
Queue.Queue 先进先出
Queue.LifoQueue 后进先出
queue.PriorityQueue 优先级队列
queue.deque 双线队列
  • 队列方法:
方法 说明
put 往队列中写入数据,默认有block=True和timeout两个参数。当block=True时,写入是阻塞式的,阻塞时间由timeout确定。当队列q被(其他线程)写满后,这段代码就会阻塞,直至其他线程取走数据。Queue.put()方法加上 block=False 的参数,即可解决这个隐蔽的问题。但要注意,非阻塞方式写队列,当队列满时会抛出 exception Queue.Full 的异常
get 取数据(默认阻塞),Queue.get([block[, timeout]])获取队列,timeout等待时间
empty 如果队列为空,返回True,反之False
qsize 显示队列中真实存在的元素长度
maxsize 最大支持的队列长度,使用时无括号
join 等到队列为空,再执行别的操作
task_done 在完成一项工作之后,Queue.task_done()函数向任务已经完成的队列发送一个信号
full 如果队列满了,返回True,反之False

生产消费模型

用队列将生产者和消费者串起来,使他们无需知道对方状态,只需要往队列中放或取数据,解决程序解耦

import threading
import Queue
import time
import random

#设置队列长度为5
q = Queue.Queue(5)

#定义生产者
def Producer(name):
    for i in range(20):
        q.put(i)
        print "Producer %s put %s"(name,i)
        time.sleep(random.randrange(4))

#定义消费者
def Consumer(name):
    while True:
        data = q.get()
        print "Consumer %s get %s"(name,i)
        time.sleep(random.randrange(3))

p = threading.Thread(target=Producer,args=("jack",))
c = threading.Thread(target=Consumer,args=("yang",))

p.start()
c.start()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后...
    LittlePy阅读 3,493评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,302评论 19 139
  • @(python)[笔记] 目录 一、什么是进程 1.1 进程的概念 进程的概念起源于操作系统,是操作系统最核心的...
    CaiGuangyin阅读 4,993评论 0 9
  • kafka的定义:是一个分布式消息系统,由LinkedIn使用Scala编写,用作LinkedIn的活动流(Act...
    时待吾阅读 10,717评论 1 15
  • 【前话】到现在第三章为止,越来越迷茫继续写下去的目的和意义,自认为不善于写连载,可是每当想起我的那些健在和逝去的亲...
    醉花令阅读 3,311评论 0 0