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中处理unchecked未捕获异常实例
Jan 17 Python
使用Python读取二进制文件的实例讲解
Jul 09 Python
python实现二维数组的对角线遍历
Mar 02 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
Sep 25 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
Jun 06 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
Jun 23 Python
Python headers请求头如何实现快速添加
Nov 03 Python
pycharm中leetcode插件使用图文详解
Dec 07 Python
pycharm配置QtDesigner的超详细方法
Jan 25 Python
Python Django获取URL中的数据详解
Nov 01 Python
代码复现python目标检测yolo3详解预测
May 06 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/29 PHP
PHP 布尔值的自增与自减的实现方法
2018/05/03 PHP
Laravel框架实现的记录SQL日志功能示例
2018/06/19 PHP
JavaScript NodeTree导航栏(菜单项JSON类型/自制)
2013/02/01 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
jquery库文件略庞大用纯js替换jquery的方法
2014/08/12 Javascript
JavaScript中自定义事件用法分析
2014/12/23 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
详解JavaScript对象类型
2016/06/16 Javascript
BooStrap对导航条的改造实践小结
2016/09/21 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
JavaScript实现父子dom同时绑定两个点击事件,一个用捕获,一个用冒泡时执行顺序的方法
2017/03/30 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
React中使用async validator进行表单验证的实例代码
2018/08/17 Javascript
vue+iview动态渲染表格详解
2019/03/19 Javascript
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
javascript设计模式 ? 迭代器模式原理与用法实例分析
2020/04/17 Javascript
VSCode搭建React Native环境
2020/05/07 Javascript
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
python实现的文件夹清理程序分享
2014/11/22 Python
Python简单实现Base64编码和解码的方法
2017/04/29 Python
Python列表切片操作实例总结
2019/02/19 Python
Django使用redis缓存服务器的实现代码示例
2019/04/28 Python
手把手教你Python yLab的绘制折线图的画法
2019/10/23 Python
如何基于Python获取图片的物理尺寸
2019/11/25 Python
flask框架中的cookie和session使用
2021/01/31 Python
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
人事专员岗位职责
2013/11/20 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
应届本科毕业生求职信
2014/07/23 职场文书
1000字打架检讨书
2014/11/03 职场文书
2015商场元旦促销活动策划方案
2014/12/09 职场文书
腾讯云服务器部署前后分离项目之前端部署
2022/06/28 Servers
LeetCode189轮转数组python示例
2022/08/05 Python