# -*- coding: UTF-8 -*-
import Queue
import threading
import time
def do_work(item):
print 'start do work'
print item
print 'end do work'
def worker(_stop_event):
while not _stop_event.is_set(): # if set is true, return
try:
item = q.get(block=False)
except Queue.Empty:
print("Queue.Empty!!!")
time.sleep(1)
continue
do_work(item)
q.task_done()
def source():
for i in range(2):
yield i
num_worker_threads = 8
thread_list = []
q = Queue.Queue()
_stop_event = threading.Event()
for i in range(num_worker_threads):
t = threading.Thread(target=worker, args=(_stop_event,))
thread_list.append(t)
t.daemon = True
print("%s start!!!" % t.getName())
t.start()
for item in source():
q.put(item,block=False)
q.join() # block until all tasks are done
print("all task done!!!")
_stop_event.set() # set true
for t in thread_list:
t.join()
print("%s exit!!!" % t.getName())