Python 线程池简单实现
803 views
0
Python 线程池实现,简单主要包括三个方面:
1) 工作线程,即 WorkThread
2) 线程池管理,即 WorkManager
3) 具体任务实现,即 do_job
Python 线程池简单实现代码
# !/usr/bin/env python
# -*- coding:utf-8 -*-
import Queue
import threading
import time
# 线程池管理
class WorkManager(object):
def __init__(self, work_num=1000, thread_num=2):
self.work_queue = Queue.Queue()
self.threads = []
self.__init_work_queue(work_num)
self.__init_thread_pool(thread_num)
def __init_thread_pool(self, thread_num):
""" 初始化线程池
"""
for i in range(thread_num):
self.threads.append(WorkThread(self.work_queue))
def __init_work_queue(self, jobs_num):
''' 初始化工作队列
'''
for i in range(jobs_num):
self.add_job(do_job, i)
def add_job(self, func, *args):
''' 添加一项工作入队
'''
self.work_queue.put((func, list(args))) # 任务入队,Queue内部实现了同步机制
def wait_allcomplete(self):
''' 等待所有线程运行完毕
'''
for item in self.threads:
if item.isAlive():
item.join()
# 工作线程
class WorkThread(threading.Thread):
def __init__(self, work_queue):
threading.Thread.__init__(self)
self.work_queue = work_queue
self.start()
def run(self):
# 死循环,从而让创建的线程在一定条件下关闭退出
while True:
try:
do, args = self.work_queue.get(block=False) # 任务异步出队,Queue内部实现了同步机制
do(args)
self.work_queue.task_done() # 通知系统任务完成
except:
break
# 具体任务实现
def do_job(args):
time.sleep(0.1) # 模拟处理时间
print threading.current_thread(), list(args)
# 测试
if __name__ == '__main__':
start = time.time()
# work_manager = WorkManager(10000, 10) # 100.469903946
work_manager = WorkManager(10000, 20) # 50.2791779041
work_manager.wait_allcomplete()
end = time.time()
print "cost all time: %s" % (end - start)
测试结果:
work_manager = WorkManager(10000, 10) # 100.469903946
work_manager = WorkManager(10000, 20) # 50.2791779041
同样完成10000个任务,不同线程数完成的时间不同,10和20个线程数完成耗时分别为 100.469903946秒和 50.2791779041秒。
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2015-01-13 04:43:33
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!
转载注明: Python 线程池简单实现 (米扑博客)