遇到Io阻塞时会切换任务之【爬虫版】
#! /usr/bin/env python3
# -*- coding:utf- -*- from urllib import request
import gevent,time
from gevent import monkey monkey.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/
bytes received from https://weibo.com/..
GET:https://www.baidu.com/
bytes received from https://www.baidu.com/..
GET:https://www.yinxiang.com/
bytes received from https://www.yinxiang.com/..
同步耗时: 0.23460006713867188
GET:https://weibo.com/
GET:https://www.baidu.com/
GET:https://www.yinxiang.com/
bytes received from https://www.baidu.com/..
bytes received from https://www.yinxiang.com/..
bytes received from https://weibo.com/..
异步耗时: 0.0946660041809082
遇到Io阻塞时会切换任务之【爬虫版】的更多相关文章
- python并发编程之IO阻塞基础知识点
		IO模型 解决IO问题的方式方法 问题是:IO操作阻塞程序执行 解决的也仅仅是网络IO操作 一般数据传输经历的两个阶段,如图: IO阻塞模型分类: 阻塞IO 非阻塞IO 多路复用IO 异步IO(爬 ... 
- python开发学习-day09(队列、多路IO阻塞、堡垒机模块、mysql操作模块)
		s12-20160312-day09 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-bottom: ... 
- 【python】-- 协程介绍及基本示例、协程遇到IO操作自动切换、协程(gevent)并发爬网页
		协程介绍及基本示例 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是协程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他 ... 
- Python网络编程-IO阻塞与非阻塞及多路复用
		前言 问题:普通套接字实现的服务端的缺陷 一次只能服务一个客户端! accept阻塞! 在没有新的套接字来之前,不能处理已经建立连接的套接字的请求 re ... 
- 通过关闭线程底层资源关闭类似synchronized及IO阻塞的情况
		public class IoBlocked implements Runnable { private InputStream in; public IoBlocked(InputStream in ... 
- IO阻塞模型 非阻塞模型
		IO阻塞模型(blocking IO) 在linux中,默认情况下所有的socket都是blocking,一个典型的读操作流程大概是这样: 所以,blocking IO的特点就是在IO执行的两 ... 
- IO阻塞模型、IO非阻塞模型、多路复用IO模型
		IO操作主要包括两类: 本地IO 网络IO 本地IO:本地IO是指本地的文件读取等操作,本地IO的优化主要是在操作系统中进行,我们对于本地IO的优化作用十分有限 网络IO:网络IO指的是在进行网络操作 ... 
- JAVAEE——宜立方商城08:Zookeeper+SolrCloud集群搭建、搜索功能切换到集群版、Activemq消息队列搭建与使用
		1. 学习计划 1.solr集群搭建 2.使用solrj管理solr集群 3.把搜索功能切换到集群版 4.添加商品同步索引库. a) Activemq b) 发送消息 c) 接收消息 2. 什么是So ... 
- 同步IO,异步IO,阻塞IO,非阻塞IO
		同步(synchronous):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回.按照这个定义, 其实 ... 
随机推荐
- python接口测试中安装whl格式的requests第三方模块
			下载 安装 requests第三方模块 下载:http://docs.python-requests.org/en/latest/user/install/#install 我下载是 https:// ... 
- 轮廓的查找、表达、绘制、特性及匹配(How to Use Contour? Find, Component, Construct, Features & Match)
			http://www.cnblogs.com/xrwang/archive/2010/02/09/HowToUseContour.html 作者:王先荣 前言 轮廓是构成任何一个形状的边界或外形 ... 
- Summary: Stack Overflow Error
			What is a stack overflow error? Parameters and local variables are allocated on the stack (with refe ... 
- 问题排查之'org.apache.rocketmq.spring.starter.core.RocketMQTemplate' that could not be found.- Bean method 'rocketMQTemplate' in 'RocketMQAutoConfiguration' not loaded.
			背景 今天将一个SpringBoot项目的配置参数从原有的.yml文件迁移到Apollo后,启动报错“Bean method 'rocketMQTemplate' in 'RocketMQAutoCo ... 
- 20155334 2016-2017-2 《Java程序设计》第八周学习总结
			20155334 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第十四章:NIO与NIO2 NIO的定义: InputStream.OutputStream ... 
- 文本按列导入excel
			打开excel,选择数据选项卡,自文本选项. 
- 测试开发-web测试要点
			参数输入考虑 参数数值包含1个.多个.很多个.null.参数值前后包含空格的2种情况 数字类型:正数.负数.0.0.0.+0.0.-0.0.指数.对数.分数.小数.复数.科学计数法的测试,全角的数 ... 
- linux rsync同步工具
			linux rsync同步工具 1.rsync介绍rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于unix/linux/windows ... 
- 自动化持续集成Jenkins
			自动化持续集成Jenkins 使用Jenkins配置自动化构建http://blog.csdn.net/littlechang/article/details/8642149 Jenkins入门总结h ... 
- Python Web学习笔记之IGMP和ICMP的差别
			理论技术:TCP/IP协议族(四)ICMP和IGMP协议! 应该先说IP协议的,后来考虑到层次性,还是先把支撑协议介绍完在细说IP!因为IP是我的最爱也是我的痛!呵呵! 一.ICMP协议 为什么要使用 ... 
