此文首发于我的个人博客:线程,协程对比和Python爬虫实战说明 — zhang0peter的个人博客


这篇文章写的是我对线程和协程的理解,有错误之处欢迎指出。

举一个餐馆的例子。我们把一个餐厅当做一个进程,如果这个餐厅只有1个服务员,那么这个餐厅是
单线程的;如果这个餐厅有2个服务员,那么这个餐厅是双线程的。
如果这个餐厅的服务员像海底捞的服务员一样,一次只服务一桌的客人,在这桌的客人离开前不会服务
下一桌的客人,那么我们称这个线程是阻塞的。如果一个服务员同时服务多桌客人,那么我们称这个线程
是非阻塞的。
实现了非阻塞的线程我们称之为协程,也就是说协程是依赖线程的存在。
下面就是Python的爬虫实战对比说明
本来想使用aiohttp库的,但为了对比效果更好,我使用requests库
我先写了一个本地的flask应用,在返回网页前等待3秒模拟真实网络爬虫

单线程爬虫:

共花费301

多线程爬虫:

共花费75

单线程协程爬虫:

只花费9
可以看出单线程的协程爬虫速度已经非常快了

多线程协程爬虫:

只花费3

总结

多线程和协程结合,能够使得爬虫的速度达到极致
代码地址:https://github.com/zhang0peter/python-coroutine

参考资料:

  • 一个故事讲完进程、线程和协程
  • asyncio:高性能异步模块使用介绍
  • Python中异步协程的使用方法介绍
  • 在 Python 中按需处理数据,第 3 部分 协程和 asyncio
  • How could I use requests in asyncio?

线程,协程对比和Python爬虫实战说明相关推荐

  1. 进程线程协程对比(通俗)

    以下的总结是我在学习网课时,总结的老师的学习笔记. 可惜不知道这个老师是谁,只想说这个老师讲的特别好! 进程.线程.协程 对比 请仔细理解如下的通俗描述 有一个老板想要开一个工厂进行生产某件商品(例如 ...

  2. 线程 协程 python_在Python 的线程中运行协程的方法

    在一篇文章 理解Python异步编程的基本原理 这篇文章中,我们讲到,如果在异步代码里面又包含了一段非常耗时的同步代码,异步代码就会被卡住. 那么有没有办法让同步代码与异步代码看起来也是同时运行的呢? ...

  3. python提高——进程、线程、协程对比及代码实现

    目录 1多任务 1.1并发 1.2并行 2线程 2.1引入线程 2.2线程进行顺序 2.3线程封装 2.4多线程-共享全局变量 2.5资源竞争 2.6互斥锁 2.7死锁 3进程 3.1进程创建 3.2 ...

  4. 进程、线程、协程对比

    进程.线程对比 功能 进程,能够完成多任务,比如 在一台电脑上能够同时运行多个QQ 线程,能够完成多任务,比如 一个QQ中的多个聊天窗口 定义的不同 进程是系统进行资源分配和调度的一个独立单位. 线程 ...

  5. Python之进程+线程+协程(异步、selectors模块、阻塞、非阻塞IO)

    文章目录 一.IO多路复用 二.selectors模块 本篇文字是关于IO多路复用的更深入一步的总结,上一篇 Python之进程+线程+协程(事件驱动模型.IO多路复用.select与epoll)对I ...

  6. 携程ajax,Python爬虫实战之爬取携程评论

    一.分析数据源 这里的数据源是指html网页?还是Aajx异步.对于爬虫初学者来说,可能不知道怎么判断,这里辰哥也手把手过一遍. 提示:以下操作均不需要登录(当然登录也可以) 咱们先在浏览器里面搜索携 ...

  7. 进程 线程 协程 各自的概念以及三者的对比分析

    文章目录 1 进程 2 线程 3 进程和线程的区别和联系 3.1 区别 3.2 联系 4 举例说明进程和线程的区别 5 进程/线程之间的亲缘性 6 协程 线程(执行一个函数)和协程的区别和联系 协程和 ...

  8. python爬虫实战之异步爬取数据

    python爬虫实战之异步爬取数据 文章目录 前言 一.需求 二.使用步骤 1.思路 2.引入库 3.代码如下 总结 前言 python中异步编程的主要三种方法:回调函数.生成器函数.线程大法. 以进 ...

  9. linux的进程/线程/协程系列5:协程的发展复兴与实现现状

    协程的发展复兴与实现现状 前言 本篇摘要: 1. 协同制的发展史 1.1 协同工作制的提出 1.2 自顶向下,无需协同 1.3 协同式思想的应用 2. 协程的复兴 2.1 高并发带来的问题 2.2 制 ...

最新文章

  1. “httpd未被被识别的服务”的解决办法
  2. A simple class to play sound on netcf (part 2)
  3. 为什么python画不了图-解决python中使用plot画图,图不显示的问题
  4. 成功解决torch\cuda\__init__.py“, line 208, in check_error raise Cuda Error(res) torch.cuda.Cuda Error: C
  5. 【Web安全】内网渗透研究之利用MSF和Impacket工具拿域控
  6. springboot整合mongodb增删改查入门
  7. 忘记 mysql 密码的取回方法
  8. catia圆柱转化为圆台_中考难点,最值问题之构造与转化
  9. hdu 2513 cake clicing(切蛋糕)
  10. STM32启动模式及API(转)
  11. et200sp系统服务器模块,ET200SP GSD文件组态时服务器模块的选择方法
  12. 理解全加器(进来学小学加法)
  13. 【华为OD机试真题 JAVA】叠积木
  14. jar包打包成exe安装包
  15. Ruby 之Gem kaminari
  16. 墨西哥总统:被拆掉两次的亭子
  17. A. Neko Finds Grapes-奇偶的性质及运用-Codeforces Round #554 (Div. 2)
  18. 荧光染料Alexa Fluor 647 carboxylic acid/COOH/羧基羧酸
  19. 英寸与毫米的换算依据
  20. 开源库MusicPlayManager - 封装StarrySky音乐库

热门文章

  1. python批处理修改文件的名字
  2. R EnhancedVolcano 绘制火山图
  3. Linux学习(1)-Linux几个基础命令及文件系统功能和作用
  4. MPB:中科院生态环境中心邓晔组-环境样本中原核生物的总量测定
  5. 大多数人都不知道,人类基因组正在衰败
  6. Science组合图表解读
  7. PNAS-皮肤微生物群综合分析揭示人类皮肤的独特性并为其在哺乳动物的系统发育共生现象提供证据
  8. VSEARCH让你免费使用无内存限制的USEARCH
  9. 宏基因组扩增子2分析流程:中文首发,史上最详系,零基础自学
  10. python描述器 触发事件_Python面向对象 - 描述器