python 简单线程池实例

# -*- coding: utf-8 -*-
import urllib2   
import time   
import socket   
from datetime import datetime   
from thread_pool import *   

import Queue, threading, sys   
from threading import Thread   
import time   
import urllib   
    
# working thread   
class Worker(Thread):   
    worker_count = 0   
    timeout = 1   
    def __init__( self, workQueue, resultQueue, **kwds):   
        Thread.__init__( self, **kwds )   
        self.id = Worker.worker_count   
        Worker.worker_count += 1   
        self.setDaemon( True )   
        self.workQueue = workQueue   
        self.resultQueue = resultQueue   
        self.start( )   
    
    def run( self ):   
        ''''''' the get-some-work, do-some-work main loop of worker threads '''   
        #死循环,从而让创建的线程在一定条件下关闭退出 
        while True:   
            try:   
                callable, args, kwds = self.workQueue.get(timeout=Worker.timeout)   
                res = callable(*args, **kwds)   
                #print "worker[%2d]: %s" % (self.id, str(res) )   
                self.resultQueue.put( res )   
                #time.sleep(Worker.sleep)   
            except Queue.Empty:   
                break   
            except :   
                print 'worker[%2d]' % self.id, sys.exc_info()[:2]   
                raise   
                  
    
class WorkerManager(object):   
    def __init__( self, num_of_workers=10, timeout = 2):   
        self.workQueue = Queue.Queue()   
        self.resultQueue = Queue.Queue()   
        self.workers = []   
        self.timeout = timeout   
        self._recruitThreads( num_of_workers )   
    """  
               初始化线程  
    """ 

    def _recruitThreads( self, num_of_workers ):   
        for i in range( num_of_workers ):   
            worker = Worker( self.workQueue, self.resultQueue )   
            self.workers.append(worker)   
    """  
            等待所有线程运行完毕  
    """  
    def wait_for_complete( self):   
        # ...then, wait for each of them to terminate:   
        while len(self.workers):   
            worker = self.workers.pop()   
            worker.join( )   
            if worker.isAlive() and not self.workQueue.empty():   
                self.workers.append( worker )   
        print "All jobs are are completed."   
    """  
            添加一项工作入队  
    """  
    def add_job( self, callable, *args, **kwds ):   
        self.workQueue.put( (callable, args, kwds) )   
    
    def get_result( self, *args, **kwds ):   
        return self.resultQueue.get( *args, **kwds )  

def main():   
    #使用线程池   
    socket.setdefaulttimeout(10)   
    #print 'start testing'   
    start = time.time()
    wm = WorkerManager(100)   
    for i in range(0,1000):   
        wm.add_job(do_get_con,i)   
    wm.wait_for_complete()   
    end = time.time()  
    print 'end testing' 
    print "cost all time: %s" % (end-start) 
    
    
def do_get_con(args):   
    try:   
        time.sleep(1)#模拟处理时间   
        #print args
        #print '#'
        print threading.current_thread(), list(args)  
    except Exception,e:   
        pass   
    
if __name__ == "__main__":   
    main()   
   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值