python3爬虫中多线程的优势总结


Posted in Python onNovember 24, 2020

有些小伙伴跟小编讨论了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爬虫中多线程的优势有哪些内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python解析模块(ConfigParser)使用方法
Dec 10 Python
python发送arp欺骗攻击代码分析
Jan 16 Python
使用python检测主机存活端口及检查存活主机
Oct 12 Python
Python实现基本数据结构中栈的操作示例
Dec 04 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
python3获取两个日期之间所有日期,以及比较大小的实例
Apr 08 Python
对python中两种列表元素去重函数性能的比较方法
Jun 29 Python
Python自定义函数计算给定日期是该年第几天的方法示例
May 30 Python
利用pandas将非数值数据转换成数值的方式
Dec 18 Python
详解Python 重学requests发起请求的基本方式
Feb 07 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
python playwrigh框架入门安装使用
Jul 23 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
Nov 24 #Python
python 如何停止一个死循环的线程
Nov 24 #Python
python将下载到本地m3u8视频合成MP4的代码详解
Nov 24 #Python
Python做图像处理及视频音频文件分离和合成功能
Nov 24 #Python
Python调用Redis的示例代码
Nov 24 #Python
基于django和dropzone.js实现上传文件
Nov 24 #Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
Nov 24 #Python
You might like
php下的权限算法的实现
2007/04/28 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
PHP中英混合字符串截取函数代码
2011/07/17 PHP
php设置编码格式的方法
2013/03/05 PHP
实例讲解PHP面向对象之多态
2014/08/20 PHP
php中数据库连接方式pdo和mysqli对比分析
2015/02/25 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解
2015/03/05 Javascript
JavaScript中setTimeout和setInterval函数的传参及调用
2016/03/11 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
jQuery实现图片向左向右切换效果的简单实例
2016/05/18 Javascript
使用BootStrap进行轮播图的制作
2017/01/06 Javascript
js 判断登录界面的账号密码是否为空
2017/02/08 Javascript
Nodejs+express+ejs简单使用实例代码
2017/09/18 NodeJs
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
深入理解Promise.all
2018/08/08 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
在Python中利用Into包整洁地进行数据迁移的教程
2015/03/30 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
使用Eclipse如何开发python脚本
2018/04/11 Python
Python3 venv搭建轻量级虚拟环境的步骤(图文)
2019/08/09 Python
python代码如何注释
2020/06/01 Python
Python 如何操作 SQLite 数据库
2020/08/17 Python
德国综合购物网站:OTTO
2018/11/13 全球购物
澳大利亚婴儿、幼儿和儿童在线设计师商店:Smooch Baby
2019/02/16 全球购物
使用索引(Index)有哪些需要考虑的因素
2016/10/19 面试题
盛大笔试题
2016/11/05 面试题
端午节活动总结
2014/08/26 职场文书
环卫工人节活动总结
2014/08/29 职场文书
公司财务经理岗位职责
2015/04/08 职场文书
爱的教育读书笔记
2015/06/26 职场文书
小公司融资,商业计划书的8切记
2019/07/15 职场文书