# -*- coding:utf-8 -*-
from __future__ import unicode_literals
import threading
import time
import Queue
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 build_consumer_pool(size, queue):
consumers = []
for i in range(size):
c = Consumer(queue=queue)
c.start()
consumers.append(c)
return consumers
def Producer():
q = Queue.Queue()
consumers = build_consumer_pool(3, q)
i = 0
while i < 12:
print 'producer put msg: %s' % i
q.put(str(i))
i += 1
for c in consumers:
q.put('quit')
for c 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(consumer, items)
pool.close()
pool.join()
print results
if __name__ == '__main__':
producer()
简单例子:
def producer():
ret = []
for i in range(100):
ret.append("包子%d" % i)
return ret
def consumer(res):
for index, enty in enumerate(res):
print("第%s个人吃%s" % (index, enty))