Python线程池

感觉这个DEMO貌似不太好修改,自己尝试了下,总感觉怪怪的。

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

    '''
       检查剩余的队列任务
    '''
    
    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)
                do(args)
                self.work_queue.task_done()
            except Exception,e:
                print str(e)
                break

def do_job(args):
    print "任务:%s " % args
    time.sleep(1)
    # print threading.current_thread(),list(args)

if __name__=='__main__':
    start=time.time()
    work_manager=WorkManager(100,10)
    work_manager.wait_allcomplete()
    end=time.time()
    print "cost all time: %s" %(end-start)

 

posted @ 2014-04-23 23:16  墨迹哥's  阅读(352)  评论(0编辑  收藏  举报