python 异步 生产者 消费者_python线程------queue、生产者和消费者模式

一、queue简介

1、queue是python标准库中的线程安全的队列(FIFO)实现,提供了一个适用于多线程编程的先进先出的数据结构,即队列,用来在生产者和消费者线程之间的信息传递

2、FIFO即First in First Out,先进先出。Queue提供了一个基本的FIFO容器,使用方法很简单,maxsize是个整数,指明了队列中能存放的数据个数的上限。一旦达到上限,插入会导致阻塞,直到队列中的数据被消费掉

二、queue的一些方法

1、 take done()

意味着之前入队的一个任务已经完成。由队列的消费者线程调用。每一个get()调用得到一个任务,接下来的task_done()调用告诉队列该任务已经处理完毕。

如果当前一个join()正在阻塞,它将在队列中的所有任务都处理完时恢复执行(即每一个由put()调用入队的任务都有一个对应的task_done()调用)。

2、 join()

阻塞调用线程,直到队列中的所有任务被处理掉。

只要有数据被加入队列,未完成的任务数就会增加。当消费者线程调用task_done()(意味着有消费者取得任务并完成任务),未完成的任务数就会减少。当未完成的任务数降到0,join()解除阻塞。

3、put()

将数据放入队列中

4、 get()

取出队列的数据

import threading,queue

import time,random

q = queue.Queue()#创建一个队列

def Producer(name):

count =0

while count < 10:

print('making.........')

time.sleep(random.randrange(3))

q.put(count)

print('Product %s has produced %s baozi...' % (name,count))

count += 1

q.task_done()

print('ok.......')

def Consumer(name):

count = 0

while count < 10:

time.sleep(random.randrange(4))

print("..............waiting..............")

q.join()

data = q.get()

print(data)

print('Comsumer %s has eat %s baozi...' % (name,data))

count += 1

p1 = threading.Thread(target = Producer,args = ('厨师',))

c1 = threading.Thread(target = Consumer,args = ('食客1',))

c2 = threading.Thread(target = Consumer,args = ('食客2',))

p1.start()

c1.start()

c2.start()

三、生产者和消费者的一些总结

#程序中有两类角色

一类负责生产数据(生产者)

一类负责处理数据(消费者)

#引入生产者消费者模型为了解决的问题是:

平衡生产者与消费者之间的工作能力,从而提高程序整体处理数据的速度

#如何实现:

生产者队列消费者

#生产者消费者模型实现类程序的解耦和

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值