#! /usr/bin/env python3
# -*- coding:utf-8 -*-from urllib import request
import gevent,time
from gevent import monkeymonkey.patch_all()    # 把当前程序中的所有io操作都做上标记def spider(url):print("GET:%s" % url)resp = request.urlopen(url)data = resp.read()print("%s bytes received from %s.." % (len(data), url))urls = ["https://weibo.com/","https://www.baidu.com/","https://www.yinxiang.com/"
]start_time = time.time()
for url in urls:spider(url)
print("同步耗时:",time.time() - start_time)async_time_start = time.time()
gevent.joinall([gevent.spawn(spider,"https://weibo.com/"),gevent.spawn(spider,"https://www.baidu.com/"),gevent.spawn(spider,"https://www.yinxiang.com/"),
])
print("异步耗时:",time.time() - async_time_start)

输出

GET:https://weibo.com/
6117 bytes received from https://weibo.com/..
GET:https://www.baidu.com/
227 bytes received from https://www.baidu.com/..
GET:https://www.yinxiang.com/
16505 bytes received from https://www.yinxiang.com/..
同步耗时: 0.23460006713867188
GET:https://weibo.com/
GET:https://www.baidu.com/
GET:https://www.yinxiang.com/
227 bytes received from https://www.baidu.com/..
16505 bytes received from https://www.yinxiang.com/..
6117 bytes received from https://weibo.com/..
异步耗时: 0.0946660041809082

转载于:https://www.cnblogs.com/sea-stream/p/10317051.html

遇到Io阻塞时会切换任务之【爬虫版】相关推荐

  1. 网络编程中同步与异步,IO阻塞与非阻塞总结

    IO操作分两个阶段 第1个阶段:等待数据准备好(从外部设备磁盘或网络读到内核缓冲区): 第2个阶段:采用系统调用(内核进程),操作系统内核将数据从内核缓冲区读到用户空间. 第1阶段花费的时间远远大于第 ...

  2. 阻塞io阻塞io_Redis:RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型

    1.Redis 阻塞IO 与非阻塞IO Java在JDK1.4 中引入了NIO ,但是也有很多人在使用阻塞IO,这两种IO有什么区别? 在阻塞模式下,如果你从数据流读取不到指定大小的数据量,IO就会阻 ...

  3. day10-协程遇到IO操作自动切换

    一.概述 感觉确实用着比generator还简单了呢,但好像还没有解决一个问题,就是遇到IO操作,自动切换,对不对?所以我们接下来就说说如何遇到IO就切换,不得不提到一个模块Gevent. Geven ...

  4. Win11新版右键菜单用不惯?一键切换回Win10经典版!

    在 Windows 11 操作系统中,微软对文件资源管理器和应用程序的上下文菜单(Context Menu,俗称"右键菜单")进行了现代化改造. Windows 11 新版右键菜单 ...

  5. 【原】简单的鼠标切换左右键(java版)

    简单的鼠标切换左右键(java版) 0. 写在最前面 客户需要一个能切换左右键的小功能满足使用需要. 具体需要如下: 我需要一个独立运行的窗口,在其中输入数字x,按下"转换"按钮后 ...

  6. 淘淘商城第66讲——将搜索功能切换到集群版Solr时,我就不信你没遇到过这个异常:org.apache.solr.client.solrj.SolrServerException ···

    问题描述 今天我在将搜索功能切换到集群版Solr,准备向索引库中导入商品数据时,碰到了一个异常.真的是一天天的都会碰到异常,太闹心了

  7. linux io阻塞问题

    在linux 上 磁盘读写过高 的 I/O 问题 导致 cpu wait 问题,这里是用一些方法找出问题. 首先 使用 top 命令找出 出现 cpu 中 是否进程运行等待问题 # top [cpp] ...

  8. 阻塞io阻塞io_面试官:直接IO、缓存IO、阻塞与同步?

    点击上方"JAVA",星标公众号 重磅干货,第一时间送达 Linux 基础知识回顾 用户空间和内核空间 现在操作系统都采用虚拟寻址,处理器先产生一个虚拟地址,通过地址翻译成物理地址 ...

  9. 2.1.3如何实现进程的控制、进程控制相关的原语(创建原语、终止、唤醒、阻塞、切换原语)

    0. 知识总览 1. 什么是进程控制? 2. 如何实现进程的控制? 3. 进程控制相关的原语 3.1 进程的创建原语 3.2 进程的终止原语 3.3 进程的唤醒和阻塞原语 3.4 进程的切换原语 4. ...

  10. LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口

    目录 1114. 按序打印 解法 1115. 交替打印FooBar 解法 1116. 打印零与奇偶数 解法 1117. H2O 生成 解法 1118. 设计有限阻塞队列 解法 1195. 交替打印字符 ...

最新文章

  1. python查看和更改当前工作目录
  2. golang goroutine 协程同步 sync.WaitGroup 简介
  3. c语言作业集答案,C语言习题集及答案
  4. 向线程传递数据与线程用回调方法检索数据
  5. eclipse 使用jetty调试时,加依赖工程的源码调试方法
  6. Anaconda简介及其下载 安装 配置 使用 卸载
  7. 计算机寄存器端口,CPU和外设之间的数据传送方式有哪几种
  8. 常用libcurl功能编程实例
  9. VScode我的setting.json设置,和搜狗输入法配置
  10. 导入AIDL例子的时候,在asBinder出现错误
  11. 23-新建maven 项目
  12. 241.为运算表达式设计优先级
  13. carrot2 Workbench org.apache.http.client.HttpResponseException: Not Found 以及其他类找不到错误的解决办法
  14. 用html5画瀑布图,漂亮的Excel瀑布图,竟然如此简单~~
  15. C语言与JAVA区别
  16. [Redis] Resid的删除策略
  17. tensorflow tf.tile 使用教程·
  18. Typewriter text that fits label beforehand
  19. 小知识:Access端口和Trunk端口
  20. Android手机修改hosts文件

热门文章

  1. Action中动态方法的调用 Action中通配符的使用 Result的配置
  2. 自己写Tiny6410的Bootloader总结!
  3. linux服务器架设——rsync
  4. Http协议规范及格式
  5. 还原真实的 cache recovery
  6. 一张思维导图带你快速了解深度学习推荐系统
  7. 摸鱼一年半,我终于摸出了一篇顶会论文
  8. 学界 | Hinton提出的经典防过拟合方法Dropout,只是SDR的特例
  9. 20191202_Apriori算法和FP-Growth算法python实现
  10. 论文赏析[AAAI18]面向序列建模的元多任务学习