在做爬虫项目时,假设获取一个页面的时间为3秒,一共需要获取10个页面,总时间也就是30秒,但是如果采用线程池,可以把总时间压缩到3秒!因为这10个页面是并行下载的(宏观是并行,微观仍然串行,只是CPU切换各任务的速度非常快而已)

Python没有内置的很好的线程池,推荐一个第三方库threadpool

# pip install threadpool
import time
import threadpooli=1
# 执行比较耗时的函数,需要开启多线程
def get_html(url):global itime.sleep(3)   # 假设获取一个页面需要3sprint("第%d个页面返回成功..."%i)i+=1if __name__ == '__main__':urls=[i for i in range(10)] # 假设十个urls=time.time()pool=threadpool.ThreadPool(10)  # 建立线程池,可并行执行10个线程(宏观)# 提交任务给线程池requests=threadpool.makeRequests(get_html,urls) # 函数,参数# 开始执行for req in requests:pool.putRequest(req)pool.wait() # 等待所有线程任务都完成e=time.time()print("共耗时{}".format(e-s))

Python多线程之构建线程池相关推荐

  1. 《转载》Python并发编程之线程池/进程池--concurrent.futures模块

    本文转载自 Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mul ...

  2. Java多线程系列--“JUC线程池”06之 Callable和Future

    转载自  Java多线程系列--"JUC线程池"06之 Callable和Future Callable 和 Future 简介 Callable 和 Future 是比较有趣的一 ...

  3. linux下c语言线程传参数,【linux】C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0...

    C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0 本贴问题,之前已经提问过一次,当时已经解决了,原贴在这里https://segmentfault.com/q/1 ...

  4. android 多线程封装,Android 线程池的封装

    GlobalThreadPools.java: /** * 全局使用的线程池 */ public class GlobalThreadPools { private static String TAG ...

  5. Python多线程编程之线程子类化

    Python多线程编程之线程子类化 基本思路 Threading模块简介 **MyThread**主要代码 实例 所有代码 运行结果 基本思路 导入Threading模块下的Thread类,将其子类化 ...

  6. python爬取使用线程池出现报错:exception calling callback for #x3c;Future at 0x1e8e963ef70 state=finished raised

    python爬取使用线程池出现报错:exception calling callback for <Future at 0x1e8e963ef70 state=finished raised T ...

  7. 【多线程】创建线程池有几种方式

    网上的文章一般会说,创建线程池基本上是2种方式.ThreadPoolExecutor或者Executors.本文就是通过剖析源码,看下它们的实现. ThreadPoolExecutor ThreadP ...

  8. python运行原理_Python线程池及其原理和使用(超级详细)

    系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 线程池在系统启动时即 ...

  9. Python 为什么要用线程池?

    一.为什么要使用线程池 多线程的情况下确实可以最大限度发挥多核处理器的计算能力,提高系统的吞吐量和性能. 但是如果随意使用多线程,对系统的性能反而有不利影响. 比如下面的情况: 创建线程是需要时间的, ...

最新文章

  1. linux下删除有锁的文件夹,Linux 文件夹右下角有锁,解锁
  2. 仿星球大战个人引导页源码
  3. 阅读类app界面设计UI可临摹素材模板
  4. windows server疑难杂症
  5. [转载] Python字符串的截取
  6. linux定时执行脚本
  7. ⌊N/1⌋,⌊N/2⌋,...⌊N/N⌋的值的集合的分析
  8. ConcurrentHashMap源码分析(保姆式讲解):Put、扩容原理详解 博主可答疑
  9. 现代密码学第一次实验:线性移位寄存器
  10. 电脑调分辨率黑屏了怎么办_Win10调分辨率后出现黑屏提示“超出工作频率范围”怎么办...
  11. 手机b站封面提取网站_二次元之家 视频网站B站上海与北京办公设计欣赏
  12. 如何快速成为CSDN的博客专家,以及「博客专家」申请及审核执行标准
  13. python怎么输出变量加文字书名_python的交互模式怎么输出名文汉字
  14. 【强大的PDF格式转换工具】Lighten PDF Converter OCR for Mac 6.2.0
  15. beeline连接hive的两种方式
  16. c 语言url 编码转换,在线编码转换URL编码URL解码
  17. 54. 流编辑器sed技术概览
  18. springboot 2.X jdbc 实现session共享mysql
  19. Matlab对图像做傅里叶变换
  20. java 23_《分布式JAVA应用 基础与实践》 第三章 3.2 JVM内存管理(三)

热门文章

  1. Autolisp:利用AuoCAD之Lisp编程案例之自动智能绘制枫叶玫瑰
  2. Matlab:单幅图象的暗原色先验去雾改进算法,能够很好地改进天空或明亮部分色彩失真问题
  3. pynlpir.LicenseError: Your license appears to have expired. Try running pynlpir update.
  4. Django 【补充】ORM多对多正向查询
  5. ASP.NET2.0服务器控件之类型化样式属性
  6. MFC中进度条控件的使用方法
  7. st-link和jlink调试stm32接线注意事项
  8. 数据挖掘 —— 数据预处理
  9. c#获取本地ip地址网关子网掩码_教你如何修改路由器LAN口IP地址的方法
  10. 膨胀卷积(Dilated convolution)