python3线程池爬虫_python3爬虫中多线程的优势总结
有些小伙伴跟小编讨论了python中使用多线程原理的问题,就聊到了关于python多线程的弊端问题,这点可能在使用的过程中大家会能感觉到。而且之前讲过的GIL也是对python多线程的一种限制。那么,我们为什么还要用多线程呢?当然是多线程的优势已经掩盖了它本身不足之处,所以我们来加强一下学习python多线程的信心吧~
总结起来,使用多线程编程具有如下几个优点:
进程之间不能共享内存,但线程之间共享内存非常容易。
操作系统在创建进程时,需要为该进程重新分配系统资源,但创建线程的代价则小得多。因此,使用多线程来实现多任务并发执行比使用多进程的效率高。
Python 语言内置了多线程功能支持,而不是单纯地作为底层操作系统的调度方式,从而简化了 Python 的多线程编程。
threading模块
普通创建方式
import threading
import time
def run(n):
print("task", n)
time.sleep(1)
print('2s')
time.sleep(1)
print('1s')
time.sleep(1)
print('0s')
time.sleep(1)
if __name__ == '__main__':
t1 = threading.Thread(target=run, args=("t1",))
t2 = threading.Thread(target=run, args=("t2",))
t1.start()
t2.start()
----------------------------------
>>> task t1
>>> task t2
>>> 2s
>>> 2s
>>> 1s
>>> 1s
>>> 0s
>>> 0s
守护线程
我们看下面这个例子,这里使用setDaemon(True)把所有的子线程都变成了主线程的守护线程,因此当主进程结束后,子线程也会随之结束。所以当主线程结束后,整个程序就退出了。
import threading
import time
def run(n):
print("task", n)
time.sleep(1) #此时子线程停1s
print('3')
time.sleep(1)
print('2')
time.sleep(1)
print('1')
if __name__ == '__main__':
t = threading.Thread(target=run, args=("t1",))
t.setDaemon(True) #把子进程设置为守护线程,必须在start()之前设置
t.start()
print("end")
----------------------------------
>>> task t1
>>> end
我们可以发现,设置守护线程之后,当主线程结束时,子线程也将立即结束,不再执行。
python多线程实例代码:
1个线程时:
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/2.html
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/3.html
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/4.html
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/5.html
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/6.html
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/7.html
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/8.html
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/9.html
Done, Time cost: 8.182249069213867
2个线程时:
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/2.html
Current Thread Name Thread-2, Url: http://www.pythontab.com/html/pythonjichu/3.html
Current Thread Name Thread-2, Url: http://www.pythontab.com/html/pythonjichu/4.html
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/5.html
Current Thread Name Thread-2, Url: http://www.pythontab.com/html/pythonjichu/6.html
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/7.html
Current Thread Name Thread-2, Url: http://www.pythontab.com/html/pythonjichu/8.html
Current Thread Name Thread-1, Url: http://www.pythontab.com/html/pythonjichu/9.html
Done, Time cost: 4.0987958908081055
python3线程池爬虫_python3爬虫中多线程的优势总结相关推荐
- python3多线程异步爬虫_python3爬虫中多线程进行解锁操作实例
生活中我们为了保障房间里物品的安全,所以给门进行上锁,在我们需要进入房间的时候又会重新打开.同样的之间我们讲过多线程中的lock,作用是为了不让多个线程运行是出错所以进行锁住的指令.但是鉴于我们实际运 ...
- python3 爬虫_Python3爬虫介绍
Python3爬虫介绍 一.为什么要做爬虫 首先请问:都说现在是"大数据时代",那数据从何而来? 数据管理咨询公司:麦肯锡.埃森哲.艾瑞咨询 爬取网络数据:如果需要的数据市场上没有 ...
- [Python3] 线程池的使用
认知: 对于多线程的作用,简单点就是把一项重复的任务分给多个渠道一起完成,这样就大大提高工作效率. 目前大多数使用线程用的都是threading模块,这模块对于现在来说我认为已经落后了,就拿爬虫来说, ...
- python线程池并发_python 并发编程多线程之进程池/线程池
一.验证GIL锁的存在 Python在设计之初就考虑到要在主循环中,同时只有一个线程在执行.虽然 Python 解释器中可以"运行"多个线程,但在任意时刻只有一个线程在解释器中运行 ...
- python3 线程池 ThreadPoolExecutor 简介
前言 从Python3.2开始,标准库为我们提供了 concurrent.futures 模块,它提供了 ThreadPoolExecutor (线程池)和ProcessPoolExecutor (进 ...
- python3 线程池源码解析_5分钟看懂系列:Python 线程池原理及实现
概述 传统多线程方案会使用"即时创建, 即时销毁"的策略.尽管与创建进程相比,创建线程的时间已经大大的缩短,但是如果提交给线程的任务是执行时间较短,而且执行次数极其频繁,那么服务器 ...
- 环形队列出队的元素怎么输出出来_队列:队列在线程池等有限资源池中的应用...
我们知道,CPU资源是有限的,任务的处理速度与线程个数并不是线性正相关的.相反,过多的线程反而会导致CPU频繁切换,处理性能下降.所以,线程池的大小一般都是综合考虑要处理任务的特点和硬件环境,来事先设 ...
- 线程池和任务工厂实现多线程异步运行
将多个线程在线程池中运行 知识点保温 引用一下微软官网的介绍: 线程池: https://docs.microsoft.com/zh-cn/dotnet/api/system.threading.th ...
- idea 断点线程_在IntelliJ IDEA中多线程并发代码的调试方法
通常来说,多线程的并发及条件断点的debug是很难完成的,或许本篇文章会给你提供一个友好的调试方法.让你在多线程开发过程中的调试更加的有的放矢. 我们将通过一个例子来学习.在这里,我编写了一个多线程程 ...
最新文章
- 判断输入的数是否质数,求范围内的质数有哪些
- 验证二叉搜索数—leetcode98
- hp-ux修改时区方法_UX研究人员可以倡导人类的6种方法
- 七牛云 转码_七牛云存储 - 七牛 php sdk 上传 转码 问题
- 新华社专题报道|陕建集团:打造「建筑行业」数字化转型标杆
- 【BZOJ2151】种树,贪心+Splay乱搞
- C++字符串操作总结
- 卷积神经网络-感受野的定义
- Sharepoint学习笔记—习题系列--70-573习题解析 -(Q136-Q138)
- VC知识库文章 - NT DDK的安装以及设备驱动程序的编译
- 基于springBoot的薪资管理系统
- Unity3D游戏开发学习线路图附全套视频教程2019最新版
- 去哪儿CEO庄辰超:傍百度战携程与巨头共舞
- matlab 马氏距离 实例,MATLAB求马氏距离(Mahalanobis distance)
- Mel中级教程精华篇预告
- Mybatis中,SQLSessionFactoryBuilder使用build方法时做了哪些事?
- openlaw爬虫超级详细讲解
- 计算机 实验室安全准入制度,实验实训室安全准入制度(试行)
- 数字人民币跟第三方支付的区别
- Lammps 源代码解析
热门文章
- linux删除文件_Linux删除文件夹用什么命令
- 2 s锁是什么_《演员请就位》:一场戏拿了2张S卡,任敏凭什么打败老戏骨?
- php异步方案,php 伪异步执行实现方法
- 鸿蒙空间是什么星辰变,飞升之后做什么《星辰变》神魔妖界收伏奇珍异兽
- 鸿蒙系统桌面小艺建议怎么删除?鸿蒙系统小艺建议怎么设置关闭及开启
- java调试,调试模式不进入内部类解决
- 计算机系统存储器分类和总线分类
- mybatis常用jdbcType数据类型
- Mvvm、第一个Vue程序、Vue基本语法
- angularjs input标签用一个日期插件后数据不能双向绑定了_微信如何定时发朋友圈?(最方便最好用的办法!)...