[学习笔记][python语言]Queue与Thread结合使用实例——多线程优雅退出

queue_test.py代码

# -*- 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())

运行结果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值