遇到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):一个进程在执行某个任务时,另外一个进程必须等待其执行完毕,才能继续执行 #所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回.按照这个定义, 其实 ...
随机推荐
- [django]模板template原理
django 中的render和render_to_response()和locals(): http://www.cnblogs.com/wangchaowei/p/6750512.html 什么是 ...
- Keepalived+HAproxy实现高可用负载均衡
总概: Keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层.第4层和第5层交换.Keepalived的作用是检测web服务器的状态, ...
- 案例:使用scan IP无法连接数据库
环境:Oracle RAC(11.2.0.3) 现象:通过scanIP连接数据库报错ORA-12514: ORA-12514: TNS:listener does not currently know ...
- php发送 与接收流文件
PHP 发送与接收流文件 sendStreamFile.php 把文件以流的形式发送 receiveStreamFile.php 接收流文件并保存到本地 sendStreamFile.php < ...
- string.Format字符串格式说明(转)
转自:http://blog.csdn.net/dl020840504/article/details/8921875 先举几个简单的应用案例: 1.格式化货币(跟系统的环境有关,中文系统默认格式 ...
- STA分析(四) lib model
library中的一个cell可以是一个standard cell,IO buffer,或者一个complex IP.其中包含area,functionality,timing,power等相关的信息 ...
- cc150 --链表分割
题目描述 编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前 给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针.注意:分割以后 ...
- yii2之创建管理员
第一步,使用迁移文件建表admin 先建立数据迁移文件: 小贴士,如果发现自己改错了,需要重新修改迁移文件 第二步,使用gii工具创建model 创建一个新的model,继承AdminAR,方便以后管 ...
- EditPlus 5.0 中文版已经发布(3月26日更新)
注意:新版本不再支持旧的注册码! 新特性: - Ctrl+Alt+Up/Down 键可添加多个插入点以及进行列选择 - Alt+鼠标点击可添加多个插入点 - 连续执行“选择单词”命令可将多个选中项添加 ...
- linux服务器---配置samba
配置samba使用用户名和密码登录 1.当samba配置文件中的secure设置为user的时候,需要正确的用户名和密码才能登录. root@localhost /]#gedit /etc/samba ...