zoukankan      html  css  js  c++  java
  • 【转】Python实现的线程池

        import Queue, threading, sys   
        from threading import Thread   
        import time,urllib   
        # working thread   
        class Worker(Thread):   
           worker_count = 0   
           def __init__( self, workQueue, resultQueue, timeout = 0, **kwds):   
               Thread.__init__( self, **kwds )   
               self.id = Worker.worker_count   
               Worker.worker_count += 1   
               self.setDaemon( True )   
               self.workQueue = workQueue   
               self.resultQueue = resultQueue   
               self.timeout = timeout   
               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=self.timeout)   
                       res = callable(*args, **kwds)   
                       print "worker[%2d]: %s" % (self.id, str(res) )   
                       self.resultQueue.put( res )   
                   except Queue.Empty:   
                       break   
                   except :   
                       print 'worker[%2d]' % self.id, sys.exc_info()[:2]   
                          
        class WorkerManager:   
           def __init__( self, num_of_workers=10, timeout = 1):   
               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.timeout )   
                   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 test_job(id, sleep = 0.001 ):   
               try:   
                   urllib.urlopen('[url]https://www.gmail.com/[/url]').read()   
               except:   
                   print '[%4d]' % id, sys.exc_info()[:2]   
               return id   
           
            def test():   
               import socket   
               socket.setdefaulttimeout(10)   
               print 'start testing'   
               wm = WorkerManager(10)   
               for i in range(500):   
                   wm.add_job( test_job, i, i*0.001 )   
               wm.wait_for_complete()   
               print 'end testing'  
        

     转自:http://developer.51cto.com/art/201002/185290.htm

  • 相关阅读:
    js快速排序
    蛇形数组
    大臣的旅费
    1724ROADS
    2738:实数加法
    完整版高精度计算(整理后的)
    2737:大整数除法
    2980:大整数乘法
    2736大整数减法,3180 整数减法
    2981:大整数加法
  • 原文地址:https://www.cnblogs.com/sunada2005/p/3184164.html
Copyright © 2011-2022 走看看