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通过ElementTree操作XML获取结点读取属性美化XML
Dec 02 Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
python递归打印某个目录的内容(实例讲解)
Aug 30 Python
python验证码识别的示例代码
Sep 21 Python
详谈python read readline readlines的区别
Sep 22 Python
遗传算法python版
Mar 19 Python
python django model联合主键的例子
Aug 06 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
python RC4加密操作示例【测试可用】
Sep 26 Python
Python3-异步进程回调函数(callback())介绍
May 02 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
Dec 16 Python
浅析pandas随机排列与随机抽样
Jan 22 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根据年月获取季度的方法
2014/03/31 PHP
php 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
Laravel框架中VerifyCsrfToken报错问题的解决
2017/08/30 PHP
php报错502badgateway解决方法
2019/10/11 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
javascript 兼容鼠标滚轮事件
2009/04/07 Javascript
关于javascript 回调函数中变量作用域的讨论
2009/09/11 Javascript
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
简单的代码实现jquery定时器
2013/11/17 Javascript
node.js中的fs.exists方法使用说明
2014/12/17 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
在JS方法中返回多个值的方法汇总
2015/05/20 Javascript
jQuery基于扩展简单实现倒计时功能的方法
2016/05/14 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
详解微信小程序之提高应用速度小技巧
2020/01/07 Javascript
解决echarts 一条柱状图显示两个值,类似进度条的问题
2020/07/20 Javascript
Python实现大文件排序的方法
2015/07/10 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
深入浅析python with语句简介
2018/04/11 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python-sys.stdout作为默认函数参数的实现
2020/02/21 Python
pyautogui自动化控制鼠标和键盘操作的步骤
2020/04/01 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
你应该知道的30个css选择器
2014/03/19 HTML / CSS
css3实现背景模糊的三种方式(小结)
2020/05/15 HTML / CSS
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
英国豪华针织品牌John Smedley的在线销售商:The Outlet by John Smedley
2018/04/08 全球购物
平面设计的岗位职责
2013/11/08 职场文书
小学生家长评语大全
2014/02/10 职场文书
培训专员岗位职责
2014/02/26 职场文书
目标责任书格式
2014/07/28 职场文书
荆州古城导游词
2015/02/06 职场文书
售后前台接待岗位职责
2015/04/03 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书