zoukankan      html  css  js  c++  java
  • 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)
  • 相关阅读:
    (二)微信开发工具
    (一)微信小程序环境搭建
    mysql安装--window版
    (六--二)scrapy框架之持久化操作
    windows安装redis
    (六--一)scrapy框架简介和基础应用
    (五)selenuim和phantonJs处理网页动态加载数据的爬取
    (四)requests模块的cookies和代理操作
    (三)三种数据解析方式学习
    (二)requests模块
  • 原文地址:https://www.cnblogs.com/xiaoCon/p/3684249.html
Copyright © 2011-2022 走看看