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的Urllib库的一些高级用法
Apr 30 Python
python处理html转义字符的方法详解
Jul 01 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
Jan 26 Python
pandas apply 函数 实现多进程的示例讲解
Apr 20 Python
Sanic框架流式传输操作示例
Jul 18 Python
python给微信好友定时推送消息的示例
Feb 20 Python
keras获得某一层或者某层权重的输出实例
Jan 24 Python
python加密解密库cryptography使用openSSL生成的密匙加密解密
Feb 11 Python
Python实现代码块儿折叠
Apr 15 Python
Python捕获异常堆栈信息的几种方法(小结)
May 18 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
Python Pandas 删除列操作
Mar 16 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数组中删除元素的实现代码
2012/06/22 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
实例讲解如何在PHP的Yii框架中进行错误和异常处理
2016/03/17 PHP
php实现图片缩略图的方法
2016/03/29 PHP
在网页中屏蔽快捷键
2006/09/06 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
JS简单实现数组去重的方法示例
2017/03/27 Javascript
vue router 跳转后回到顶部的实例
2018/08/31 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
vue 百度地图(vue-baidu-map)绘制方向箭头折线实例代码详解
2020/04/28 Javascript
JS sort排序详细使用方法示例解析
2020/09/27 Javascript
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
Python遍历目录并批量更换文件名和目录名的方法
2016/09/19 Python
python中如何正确使用正则表达式的详细模式(Verbose mode expression)
2017/11/08 Python
Python使用functools实现注解同步方法
2018/02/06 Python
python数据分析数据标准化及离散化详解
2018/02/26 Python
在python中pandas的series合并方法
2018/11/12 Python
Python爬虫:url中带字典列表参数的编码转换方法
2019/08/21 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
Python语法之精妙的十个知识点(装B语法)
2020/01/18 Python
CSS3 选择器 伪类选择器介绍
2012/01/21 HTML / CSS
用React加CSS3实现微信拆红包动画效果
2017/03/13 HTML / CSS
不可轻视HTML5!App三年内将被html5顶替彻底消失
2015/11/18 HTML / CSS
高级护理专业大学生求职信
2013/10/24 职场文书
社区端午节活动方案
2014/01/28 职场文书
甜品店创业计划书
2014/08/14 职场文书
2014年体育工作总结
2014/11/24 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
个人催款函范文
2015/06/24 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
Javascript中的解构赋值语法详解
2021/04/02 Javascript
一篇文章学会Vue中间件管道
2021/06/20 Vue.js
vue整合百度地图显示指定地点信息
2022/04/06 Vue.js