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中列表生成式和生成器的区别
Aug 03 Python
Python中集合的内建函数和内建方法学习教程
Aug 19 Python
Python文件处理
Feb 29 Python
如何利用Fabric自动化你的任务
Oct 20 Python
Python 数据结构之队列的实现
Jan 22 Python
python爬虫使用cookie登录详解
Dec 27 Python
python opencv实现运动检测
Jul 10 Python
Python logging模块用法示例
Aug 28 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 Python
Python生成一个迭代器的实操方法
Jun 18 Python
python 反编译exe文件为py文件的实例代码
Jun 27 Python
Python max函数中key的用法及原理解析
Jun 26 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循环语句笔记(foreach,list)
2011/11/29 PHP
php生成扇形比例图实例
2013/11/06 PHP
ThinkPHP之M方法实例详解
2014/06/20 PHP
用js实现计算加载页面所用的时间
2010/04/02 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
浅谈jQuery中 wrap() wrapAll() 与 wrapInner()的差异
2014/11/12 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
jQuery EasyUI右键菜单实现关闭标签/选项卡
2016/10/10 Javascript
vue.js表格分页示例
2016/10/18 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
Angular CLI 安装和使用教程
2017/09/13 Javascript
vue-cli实现多页面多路由的示例代码
2018/01/30 Javascript
Node.js中的cluster模块深入解读
2018/06/11 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
2020/05/01 Javascript
vue-cli3 热更新配置操作
2020/09/18 Javascript
手动实现把python项目发布为exe可执行程序过程分享
2014/10/23 Python
Python用于学习重要算法的模块pygorithm实例浅析
2018/08/16 Python
python顺序执行多个py文件的方法
2019/06/29 Python
Python 中pandas索引切片读取数据缺失数据处理问题
2019/10/09 Python
Django+Django-Celery+Celery的整合实战
2021/01/20 Python
华润集团网上药店:健一网
2016/09/19 全球购物
美国优质宠物用品购买网站:Muttropolis
2020/02/17 全球购物
高二学生评语大全
2014/04/25 职场文书
社区义诊活动总结
2014/04/30 职场文书
消防安全宣传口号
2014/06/10 职场文书
校园活动策划方案
2014/06/13 职场文书
销售顾问工作计划书
2014/09/15 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
毕业生银行实习自我鉴定
2014/10/14 职场文书
万能检讨书2000字
2014/10/17 职场文书
群众路线剖析材料(四风)
2014/11/05 职场文书
2015年党员个人自我评价
2015/03/03 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
关于Spring配置文件加载方式变化引发的异常详解
2022/01/18 Java/Android
详解Mysql事务并发(脏读、不可重复读、幻读)
2022/04/29 MySQL