1. 程式人生 > >用python實現一個執行緒池

用python實現一個執行緒池

# !/usr/bin/env python # -*- coding:utf-8 -*- # ref_blog:http://www.open-open.com/home/space-5679-do-blog-id-3247.html 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(Work(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 check_queue(self):         return self.work_queue.qsize()     """         等待所有執行緒執行完畢     """      def wait_allcomplete(self):         for item in self.threads:             if item.isAlive():item.join() class Work(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 Exception,e:                 print str(e)                 break #具體要做的任務 def do_job(args):     print args     time.sleep(0.1)#模擬處理時間     print threading.current_thread(), list(args) if __name__ == '__main__':     start = time.time()     work_manager =  WorkManager(10, 2)#或者work_manager =  WorkManager(10000, 20)     work_manager.wait_allcomplete()     end = time.time()     print "cost all time: %s" % (end-start)