1. import urllib2
  2. import time
  3. import socket
  4. from datetime import datetime
  5. from thread_pool import *
  6. def main():
  7. url_list = {"sina":"http://www.sina.com.cn",
  8. "sohu":"http://www.sohu.com",
  9. "yahoo":"http://www.yahoo.com",
  10. "xiaonei":"http://www.xiaonei.com",
  11. "qihoo":"http://www.qihoo.com",
  12. "laohan":"http://www.laohan.org",
  13. "eyou":"http://www.eyou.com",
  14. "chinaren":"http://www.chinaren.com",
  15. "douban":"http://www.douban.com",
  16. "163":"http://www.163.com",
  17. "daqi":"http://www.daqi.com",
  18. "qq":"http://www.qq.com",
  19. "baidu_1":"http://www.baidu.com/s?wd=asdfasdf",
  20. "baidu_2":"http://www.baidu.com/s?wd=dddddddf",
  21. "google_1":"http://www.baidu.com/s?wd=sadfas",
  22. "google_2":"http://www.baidu.com/s?wd=sadflasd",
  23. "hainei":"http://www.hainei.com",
  24. "microsoft":"http://www.microsoft.com",
  25. "wlzuojia":"http://www.wlzuojia.com"}
  26. #使用线程池
  27. socket.setdefaulttimeout(10)
  28. print 'start testing'
  29. wm = WorkerManager(50)
  30. for url_name in url_list.keys():
  31. wm.add_job(do_get_con, url_name, url_list[url_name])
  32. wm.wait_for_complete()
  33. print 'end testing'
  34. def do_get_con(url_name,url_link):
  35. try:
  36. fd = urllib2.urlopen(url_link)
  37. data = fd.read()
  38. f_hand = open("/tmp/ttt/%s" % url_name,"w")
  39. f_hand.write(data)
  40. f_hand.close()
  41. except Exception,e:
  42. pass
  43. if __name__ == "__main__":
  44. main()
  45. thread_pool的代码(非原创,转自:http://blog.daviesliu.net/2006/10/09/234822/)
  46. import Queue, threading, sys
  47. from threading import Thread
  48. import time
  49. import urllib
  50. # working thread
  51. class Worker(Thread):
  52. worker_count = 0
  53. timeout = 1
  54. def __init__( self, workQueue, resultQueue, **kwds):
  55. Thread.__init__( self, **kwds )
  56. self.id = Worker.worker_count
  57. Worker.worker_count += 1
  58. self.setDaemon( True )
  59. self.workQueue = workQueue
  60. self.resultQueue = resultQueue
  61. self.start( )
  62. def run( self ):
  63. ''''' the get-some-work, do-some-work main loop of worker threads '''
  64. while True:
  65. try:
  66. callable, args, kwds = self.workQueue.get(timeout=Worker.timeout)
  67. res = callable(*args, **kwds)
  68. print "worker[%2d]: %s" % (self.id, str(res) )
  69. self.resultQueue.put( res )
  70. #time.sleep(Worker.sleep)
  71. except Queue.Empty:
  72. break
  73. except :
  74. print 'worker[%2d]' % self.id, sys.exc_info()[:2]
  75. raise
  76. class WorkerManager:
  77. def __init__( self, num_of_workers=10, timeout = 2):
  78. self.workQueue = Queue.Queue()
  79. self.resultQueue = Queue.Queue()
  80. self.workers = []
  81. self.timeout = timeout
  82. self._recruitThreads( num_of_workers )
  83. def _recruitThreads( self, num_of_workers ):
  84. for i in range( num_of_workers ):
  85. worker = Worker( self.workQueue, self.resultQueue )
  86. self.workers.append(worker)
  87. def wait_for_complete( self):
  88. # ...then, wait for each of them to terminate:
  89. while len(self.workers):
  90. worker = self.workers.pop()
  91. worker.join( )
  92. if worker.isAlive() and not self.workQueue.empty():
  93. self.workers.append( worker )
  94. print "All jobs are are completed."
  95. def add_job( self, callable, *args, **kwds ):
  96. self.workQueue.put( (callable, args, kwds) )
  97. def get_result( self, *args, **kwds ):
  98. return self.resultQueue.get( *args, **kwds )

Python 线程池的实现的更多相关文章

  1. 自定义高级版python线程池

    基于简单版创建类对象过多,现自定义高级版python线程池,代码如下 #高级线程池 import queue import threading import time StopEvent = obje ...

  2. 对Python线程池

    本文对Python线程池进行详细说明介绍,IDE选择及编码的解决方案进行了一番详细的描述,实为Python初学者必读的Python学习经验心得. AD: 干货来了,不要等!WOT2015 北京站演讲P ...

  3. Python 线程池(小节)

    Python 线程池(小节) from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor import os,time, ...

  4. python线程池ThreadPoolExecutor(上)(38)

    在前面的文章中我们已经介绍了很多关于python线程相关的知识点,比如 线程互斥锁Lock / 线程事件Event / 线程条件变量Condition 等等,而今天给大家讲解的是 线程池ThreadP ...

  5. python线程池及其原理和使用

    python线程池及其原理和使用 2019-05-29 17:05:20 whatday 阅读数 576 系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很 ...

  6. python线程池示例

    使用with方式创建线程池,任务执行完毕之后,会自动关闭资源 , 否则就需要手动关闭线程池资源  import threading, time from concurrent.futures impo ...

  7. Python线程池与进程池

    Python线程池与进程池 前言 前面我们已经将线程并发编程与进程并行编程全部摸了个透,其实我第一次学习他们的时候感觉非常困难甚至是吃力.因为概念实在是太多了,各种锁,数据共享同步,各种方法等等让人十 ...

  8. python线程池实现

    python 的线程池主要有threadpool,不过它并不是内置的库,每次使用都需要安装,而且使用起来也不是那么好用,所以自己写了一个线程池实现,每次需要使用直接import即可.其中还可以根据传入 ...

  9. 《转》python线程池

    线程池的概念是什么? 在IBM文档库中这样的一段描写:“在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源.在Java中更是 如此,虚拟机将试图跟踪每一个对象 ...

  10. 一个简单的python线程池框架

    初学python,实现了一个简单的线程池框架,线程池中除Wokers(工作线程)外,还单独创建了一个日志线程,用于日志的输出.线程间采用Queue方式进行通信. 代码如下:(不足之处,还请高手指正) ...

随机推荐

  1. java工程开发之图形化界面之(第四课)

    本节中,我们将创建一个小应用程序,它使用循环生成其图案.我们将使用if语句和setColor方法.同时我们将介绍drawString方法,并使用它在小应用程序窗口中写出文本. 下面的小应用程序是显示一 ...

  2. 快速部署Python应用:Nginx+uWSGI配置详解

    在PHP里,最方便的就是deployment了,只要把php文件丢到支持PHP的路径里面,然后访问那个路径就能使用了:无论给主机添加多少PHP应用,只要把目录改好就没你的事了,完全不用关心php-cg ...

  3. MVC3 Razor 根据不同页面使用不同Layout

    _ViewStart.cshtml运行于每一Page前, 所以通常在这里先设置Layout   下面代码为特定的controller指定Index,Edit,Create的模板 即Index对应  _ ...

  4. AIM Tech Round 3 (Div. 2) B 数学+贪心

    http://codeforces.com/contest/709 题目大意:给一个一维的坐标轴,上面有n个点,我们刚开始在位置a,问,从a点开始走,走n-1个点所需要的最小路程. 思路:我们知道,如 ...

  5. 【转】Build Your own Simplified AngularJS in 200 Lines of JavaScript

    原文:http://blog.mgechev.com/2015/03/09/build-learn-your-own-light-lightweight-angularjs/ Build Your o ...

  6. Diamond Collector

    Diamond Collector 题目描述 Bessie the cow, always a fan of shiny objects, has taken up a hobby of mining ...

  7. 全新安装免费的OS X Mavericks 10.9正式版--安装U盘制作指南

    承诺大家的教程来了,这个教程是介绍如何在Mac下制作安装正版USB启动安装程序,原教程出自Tonymacx86.我只是加入了自己的理解,用自己的方式给大家讲这个过程.这里要把所有的成绩归功于Tonym ...

  8. HDU 2444 The Accomodation of Students(二分图判定+最大匹配)

    这是一个基础的二分图,题意比较好理解,给出n个人,其中有m对互不了解的人,先让我们判断能不能把这n对分成两部分,这就用到的二分图的判断方法了,二分图是没有由奇数条边构成环的图,这里用bfs染色法就可以 ...

  9. 集合-字典(Dictionary)

    字典(散列表):允许按照某个键来访问元素,能根据键快速查找元素,也可以自由添加,删除元素.比较像List<T>类,但没有list向后移动元素的性能开销. .net中最主要的字典类是Dict ...

  10. tinkphp5.0 traits 的引入

    Traits引入 ThinkPHP 5.0开始采用trait功能(PHP5.4+)来作为一种扩展机制,可以方便的实现一个类库的多继承问题. trait是一种为类似 PHP 的单继承语言而准备的代码复用 ...