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+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 Python
python实现分页效果
Oct 25 Python
用Python登录好友QQ空间点赞的示例代码
Nov 04 Python
Python跨文件全局变量的实现方法示例
Dec 10 Python
详解python 注释、变量、类型
Aug 10 Python
元组列表字典(莫烦python基础)
Apr 03 Python
Python设置matplotlib.plot的坐标轴刻度间隔以及刻度范围
Jun 25 Python
python实现连连看游戏
Feb 14 Python
解决python DataFrame 打印结果不换行问题
Apr 09 Python
python3 sleep 延时秒 毫秒实例
May 04 Python
python开发入门——set的使用
Sep 03 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 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
星际实力自我测试
2020/03/04 星际争霸
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
2019/09/18 PHP
jquery json 实例代码
2010/12/02 Javascript
js实现的标题栏新消息闪烁提示效果
2014/06/06 Javascript
js中实现多态采用和继承类似的方法
2014/08/22 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
javascript白色简洁计算器
2015/05/04 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
JS中使用apply方法通过不同数量的参数调用函数的方法
2016/05/31 Javascript
JavaScript浏览器对象之一Window对象详解
2016/06/03 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
js实现首屏延迟加载实现方法 js实现多屏单张图片延迟加载效果
2017/07/17 Javascript
基于react组件之间的参数传递(详解)
2017/09/05 Javascript
Vue2.0子同级组件之间数据交互方法
2018/02/28 Javascript
JS实现的3des+base64加密解密算法完整示例
2018/05/18 Javascript
JS中call()和apply()的功能及用法实例分析
2019/06/28 Javascript
20招让你的Python飞起来!
2016/09/27 Python
Python中扩展包的安装方法详解
2017/06/14 Python
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
浅谈python中字典append 到list 后值的改变问题
2018/05/04 Python
python实现ip代理池功能示例
2019/07/05 Python
深入了解Python iter() 方法的用法
2019/07/11 Python
Python 如何创建一个简单的REST接口
2020/07/30 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
英国骑行、跑步、游泳、铁人三项运动装备专卖店:Wiggle
2016/08/23 全球购物
Born鞋子官网:Born Shoes
2017/04/06 全球购物
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
PHP如何调用MYSQL存储过程
2014/05/30 面试题
生活部的活动方案
2014/08/19 职场文书
个人批评与自我批评范文
2014/10/17 职场文书
2014年教育培训工作总结
2014/12/08 职场文书
读书笔记格式
2015/07/02 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书