生产者消费者模式例子实现

class Consumer(threading.Thread):
def __init__(self, queue):
threading.Thread.__init__(self)
self._queue = queue

def run(self):
while True:
msg = self._queue.get()

if isinstance(msg, str) and msg == 'quit':
break

time.sleep(1)
print 'consumer receive msg: %s' % msg

print 'consumer finished'


def Producer():
q = Queue.Queue()
c = Consumer(q)
c.start()

i = 0
while i < 10:
print 'producer put msg: %s' % i
q.put(str(i))
time.sleep(0.5)

i += 1

q.put('quit')
c.join()


if __name__ == '__main__':
Producer()

join的原理就是依次检验线程池中的线程是否结束,没有结束就阻塞直到线程结束,如果结束则跳转执行下一个线程的join函数。
2.一个生产者,多个消费者
 
# -*- coding:utf-8 -*-
from __future__ import unicode_literals
import threading
import time
import Queue


class Consumer(threading.Thread):
def __init__(selfqueue):
threading.Thread.__init__(self)
self._queue = queue

def run(self):
while True:
msg = self._queue.get()

if isinstance(msgstrand msg == 'quit':
break

time.sleep(1)
print 'consumer receive msg: %s' % msg

print 'consumer finished'


def build_consumer_pool(sizequeue):
consumers = []

for in range(size):
c = Consumer(queue=queue)
c.start()
consumers.append(c)

return consumers


def Producer():
q = Queue.Queue()
consumers = build_consumer_pool(3q)

i = 0
while i < 12:
print 'producer put msg: %s' % i
q.put(str(i))

i += 1

for in consumers:
q.put('quit')

for in consumers:
c.join()


if __name__ == '__main__':
Producer()

3.线程池:
 
# coding: utf-8

import time


from multiprocessing.dummy import Pool as ThreadPool


def consumer(msg):
print 'consumer receive msg: %s' % msg
time.sleep(1)
return msg


def producer():
items = []
pool = ThreadPool(4)

i = 0
while i < 12:
print 'producer put msg: %s' % i
items.append(str(i))
i += 1

results = pool.map(consumeritems)
pool.close()
pool.join()
print results


if __name__ == '__main__':
producer()

简单例子:
 
def producer():
ret = []
for in range(100):
ret.append("包子%d" % i)
return ret


def consumer(res):
for indexenty in enumerate(res):
print("%s个人吃%s" % (indexenty))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值