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快速查找算法应用实例
Sep 26 Python
跟老齐学Python之大话题小函数(1)
Oct 10 Python
Python的迭代器和生成器使用实例
Jan 14 Python
在Python中marshal对象序列化的相关知识
Jul 01 Python
python使用clear方法清除字典内全部数据实例
Jul 11 Python
matplotlib简介,安装和简单实例代码
Dec 26 Python
浅谈python之新式类
Aug 12 Python
python 文件查找及内容匹配方法
Oct 25 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
May 07 Python
python中单下划线(_)和双下划线(__)的特殊用法
Aug 29 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
Jun 03 Python
如何在keras中添加自己的优化器(如adam等)
Jun 19 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数学运算
2011/12/30 PHP
php算法实例分享
2015/07/14 PHP
PHP使用正则表达式获取微博中的话题和对象名
2015/07/18 PHP
php计算title标题相似比的方法
2015/07/29 PHP
php获取文件名称和扩展名的方法
2017/02/07 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
2019/05/09 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
微信支付之JSAPI公众号支付详解
2019/05/15 PHP
js过滤数组重复元素的方法
2010/09/05 Javascript
js中widow.open()方法使用详解
2013/07/30 Javascript
5个书写JavaScript代码的坏习惯,看看你中枪了没?
2014/11/06 Javascript
学习Javascript闭包(Closure)知识
2016/08/07 Javascript
将html页面保存成图片,图片写入pdf的实现方法(推荐)
2016/09/17 Javascript
javascript实现简单的ajax封装示例
2016/12/28 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
SeaJS中use函数用法实例分析
2017/10/10 Javascript
使用axios实现上传图片进度条功能
2017/12/21 Javascript
jquery中ajax请求后台数据成功后既不执行success也不执行error的完美解决方法
2017/12/24 jQuery
微信小程序如何播放腾讯视频的实现
2019/09/20 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
Vue 实例中使用$refs的注意事项
2021/01/29 Vue.js
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
使用python PIL库实现简单验证码的去噪方法步骤
2019/05/10 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
Selenium启动Chrome时配置选项详解
2020/03/18 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
BLACKMORES澳洲官网:澳大利亚排名第一的保健品牌
2018/09/27 全球购物
离婚协议书范文
2015/01/26 职场文书
2015年安全工作总结范文
2015/04/02 职场文书
基督教追悼会答谢词
2015/09/29 职场文书