遇到Io阻塞时会切换任务之【爬虫版】
#! /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阻塞时会切换任务之【爬虫版】相关推荐
- 网络编程中同步与异步,IO阻塞与非阻塞总结
IO操作分两个阶段 第1个阶段:等待数据准备好(从外部设备磁盘或网络读到内核缓冲区): 第2个阶段:采用系统调用(内核进程),操作系统内核将数据从内核缓冲区读到用户空间. 第1阶段花费的时间远远大于第 ...
- 阻塞io阻塞io_Redis:RESP协议,阻塞IO 与非阻塞IO,Redis的线程模型
1.Redis 阻塞IO 与非阻塞IO Java在JDK1.4 中引入了NIO ,但是也有很多人在使用阻塞IO,这两种IO有什么区别? 在阻塞模式下,如果你从数据流读取不到指定大小的数据量,IO就会阻 ...
- day10-协程遇到IO操作自动切换
一.概述 感觉确实用着比generator还简单了呢,但好像还没有解决一个问题,就是遇到IO操作,自动切换,对不对?所以我们接下来就说说如何遇到IO就切换,不得不提到一个模块Gevent. Geven ...
- Win11新版右键菜单用不惯?一键切换回Win10经典版!
在 Windows 11 操作系统中,微软对文件资源管理器和应用程序的上下文菜单(Context Menu,俗称"右键菜单")进行了现代化改造. Windows 11 新版右键菜单 ...
- 【原】简单的鼠标切换左右键(java版)
简单的鼠标切换左右键(java版) 0. 写在最前面 客户需要一个能切换左右键的小功能满足使用需要. 具体需要如下: 我需要一个独立运行的窗口,在其中输入数字x,按下"转换"按钮后 ...
- 淘淘商城第66讲——将搜索功能切换到集群版Solr时,我就不信你没遇到过这个异常:org.apache.solr.client.solrj.SolrServerException ···
问题描述 今天我在将搜索功能切换到集群版Solr,准备向索引库中导入商品数据时,碰到了一个异常.真的是一天天的都会碰到异常,太闹心了
- linux io阻塞问题
在linux 上 磁盘读写过高 的 I/O 问题 导致 cpu wait 问题,这里是用一些方法找出问题. 首先 使用 top 命令找出 出现 cpu 中 是否进程运行等待问题 # top [cpp] ...
- 阻塞io阻塞io_面试官:直接IO、缓存IO、阻塞与同步?
点击上方"JAVA",星标公众号 重磅干货,第一时间送达 Linux 基础知识回顾 用户空间和内核空间 现在操作系统都采用虚拟寻址,处理器先产生一个虚拟地址,通过地址翻译成物理地址 ...
- 2.1.3如何实现进程的控制、进程控制相关的原语(创建原语、终止、唤醒、阻塞、切换原语)
0. 知识总览 1. 什么是进程控制? 2. 如何实现进程的控制? 3. 进程控制相关的原语 3.1 进程的创建原语 3.2 进程的终止原语 3.3 进程的唤醒和阻塞原语 3.4 进程的切换原语 4. ...
- LeetCode刷题 多线程编程九则 | 1188. 设计有限阻塞队列 1242. 多线程网页爬虫 1279. 红绿灯路口
目录 1114. 按序打印 解法 1115. 交替打印FooBar 解法 1116. 打印零与奇偶数 解法 1117. H2O 生成 解法 1118. 设计有限阻塞队列 解法 1195. 交替打印字符 ...
最新文章
- python查看和更改当前工作目录
- golang goroutine 协程同步 sync.WaitGroup 简介
- c语言作业集答案,C语言习题集及答案
- 向线程传递数据与线程用回调方法检索数据
- eclipse 使用jetty调试时,加依赖工程的源码调试方法
- Anaconda简介及其下载 安装 配置 使用 卸载
- 计算机寄存器端口,CPU和外设之间的数据传送方式有哪几种
- 常用libcurl功能编程实例
- VScode我的setting.json设置,和搜狗输入法配置
- 导入AIDL例子的时候,在asBinder出现错误
- 23-新建maven 项目
- 241.为运算表达式设计优先级
- carrot2 Workbench org.apache.http.client.HttpResponseException: Not Found 以及其他类找不到错误的解决办法
- 用html5画瀑布图,漂亮的Excel瀑布图,竟然如此简单~~
- C语言与JAVA区别
- [Redis] Resid的删除策略
- tensorflow tf.tile 使用教程·
- Typewriter text that fits label beforehand
- 小知识:Access端口和Trunk端口
- Android手机修改hosts文件