博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】Python实现的线程池
阅读量:6938 次
发布时间:2019-06-27

本文共 2833 字,大约阅读时间需要 9 分钟。

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://bqinl.baihongyu.com/

你可能感兴趣的文章
共享充电,是雪中送炭还是暗藏危险?——恶意充电宝实验
查看>>
12月个人考核:列出常用动态磁盘种类及对应所需磁盘数量、磁盘利用率、性能特点、冗余性。...
查看>>
Spark Learning
查看>>
PXE服务器部署
查看>>
配置jdk环境变量
查看>>
lamp架构
查看>>
今天,SAP 想和你一起思考一个问题
查看>>
云原生生态周报 Vol. 7 | Docker 再爆 CVE
查看>>
Twitter 宣布抛弃 Mesos,全面转向Kubernetes
查看>>
Ubuntu 15.10内建隐藏式滚动条
查看>>
Infortrend企业级智能AI存储一体机的应用场景
查看>>
Vtokendapp公链诠释
查看>>
What is Java Auto Update?
查看>>
JetBrains Rider 2018.3.4
查看>>
在ASP.NET Core应用中如何设置和获取与执行环境相关的信息?
查看>>
Python进阶之装饰器
查看>>
神器 Tmux 的超绝便利
查看>>
个人简历
查看>>
数据结构图之六(关键路径)
查看>>
如何做好企业级邮件系统的安全防范技术?
查看>>