Python多线程之构建线程池
在做爬虫项目时,假设获取一个页面的时间为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多线程之构建线程池相关推荐
- 《转载》Python并发编程之线程池/进程池--concurrent.futures模块
本文转载自 Python并发编程之线程池/进程池--concurrent.futures模块 一.关于concurrent.futures模块 Python标准库为我们提供了threading和mul ...
- Java多线程系列--“JUC线程池”06之 Callable和Future
转载自 Java多线程系列--"JUC线程池"06之 Callable和Future Callable 和 Future 简介 Callable 和 Future 是比较有趣的一 ...
- linux下c语言线程传参数,【linux】C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0...
C语言多线程中运行线程池,在线程池中运行线程池,,传递的结构体参数值为空/NULL/0 本贴问题,之前已经提问过一次,当时已经解决了,原贴在这里https://segmentfault.com/q/1 ...
- android 多线程封装,Android 线程池的封装
GlobalThreadPools.java: /** * 全局使用的线程池 */ public class GlobalThreadPools { private static String TAG ...
- Python多线程编程之线程子类化
Python多线程编程之线程子类化 基本思路 Threading模块简介 **MyThread**主要代码 实例 所有代码 运行结果 基本思路 导入Threading模块下的Thread类,将其子类化 ...
- python爬取使用线程池出现报错:exception calling callback for #x3c;Future at 0x1e8e963ef70 state=finished raised
python爬取使用线程池出现报错:exception calling callback for <Future at 0x1e8e963ef70 state=finished raised T ...
- 【多线程】创建线程池有几种方式
网上的文章一般会说,创建线程池基本上是2种方式.ThreadPoolExecutor或者Executors.本文就是通过剖析源码,看下它们的实现. ThreadPoolExecutor ThreadP ...
- python运行原理_Python线程池及其原理和使用(超级详细)
系统启动一个新线程的成本是比较高的,因为它涉及与操作系统的交互.在这种情形下,使用线程池可以很好地提升性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池. 线程池在系统启动时即 ...
- Python 为什么要用线程池?
一.为什么要使用线程池 多线程的情况下确实可以最大限度发挥多核处理器的计算能力,提高系统的吞吐量和性能. 但是如果随意使用多线程,对系统的性能反而有不利影响. 比如下面的情况: 创建线程是需要时间的, ...
最新文章
- linux下删除有锁的文件夹,Linux 文件夹右下角有锁,解锁
- 仿星球大战个人引导页源码
- 阅读类app界面设计UI可临摹素材模板
- windows server疑难杂症
- [转载] Python字符串的截取
- linux定时执行脚本
- ⌊N/1⌋,⌊N/2⌋,...⌊N/N⌋的值的集合的分析
- ConcurrentHashMap源码分析(保姆式讲解):Put、扩容原理详解 博主可答疑
- 现代密码学第一次实验:线性移位寄存器
- 电脑调分辨率黑屏了怎么办_Win10调分辨率后出现黑屏提示“超出工作频率范围”怎么办...
- 手机b站封面提取网站_二次元之家 视频网站B站上海与北京办公设计欣赏
- 如何快速成为CSDN的博客专家,以及「博客专家」申请及审核执行标准
- python怎么输出变量加文字书名_python的交互模式怎么输出名文汉字
- 【强大的PDF格式转换工具】Lighten PDF Converter OCR for Mac 6.2.0
- beeline连接hive的两种方式
- c 语言url 编码转换,在线编码转换URL编码URL解码
- 54. 流编辑器sed技术概览
- springboot 2.X jdbc 实现session共享mysql
- Matlab对图像做傅里叶变换
- java 23_《分布式JAVA应用 基础与实践》 第三章 3.2 JVM内存管理(三)
热门文章
- Autolisp:利用AuoCAD之Lisp编程案例之自动智能绘制枫叶玫瑰
- Matlab:单幅图象的暗原色先验去雾改进算法,能够很好地改进天空或明亮部分色彩失真问题
- pynlpir.LicenseError: Your license appears to have expired. Try running pynlpir update.
- Django 【补充】ORM多对多正向查询
- ASP.NET2.0服务器控件之类型化样式属性
- MFC中进度条控件的使用方法
- st-link和jlink调试stm32接线注意事项
- 数据挖掘 —— 数据预处理
- c#获取本地ip地址网关子网掩码_教你如何修改路由器LAN口IP地址的方法
- 膨胀卷积(Dilated convolution)