requests库是python一个优秀的HTTP库,使用它可以非常简单地执行HTTP的各种操作,例如GET、POST等。不过,这个库所执行的网络请求都是同步了,即cpu发出请求指令后,IO执行发送和等待等操作,在这段IO执行的时间里,cpu什么也不做,这样cpu的计算能力就被浪费了。所以,可以尝试把网络请求修改为异步的,也就是在IO发挥作用的这段时间,CPU去做这个程序里的其他事情,等IO收到响应的数据,CPU回来处理。偶然发现下面的帖子特分享与大家,并与requests库进行简单响应速度比较:

建议先阅读原博主文章:

感谢原博主的分享精神,转到原博地址:  HTTPS://WWW.LETIANTIAN.ME/2014-10-04-ASYNCHRONOUS-REQUESTS/

重要参数:

这里需要补充的是几个grequests的重要参数:

def grequests.map(requests, stream=False, size=None, exception_handler=None, gtimeout=None) 
参数 说明 备注
size 协程的并发度 当一个协程进行IO等待的时候,就会将CPU交给其他协程序,一般设置为50 ~ 100足矣
exception_handler 协程的并发度 捕获单个请求的异常
gtimeout 整体请求的超时设置

-----------------------------------华丽的分割线-----------------------------------------------------------------------

下面是对 grequests库和requests库的响应比较

pasting

# -*- coding: utf-8 -*-
import grequests
import time
import requests
import cProfile
import sys
reload(sys)
sys.setdefaultencoding('utf-8') # 同网络环境下比较结果 def exception_handler(request, exception):
"""单个请求错误提示"""
print '请求错误'
urls = ['http://letiantian.me/'] * 10 def test1(urls): # ------------------- grequests 库请求-------------------------------------
reqs = [grequests.get(url) for url in urls] # 用时1秒左右
response = grequests.map(reqs, exception_handler=exception_handler)
# print response[9].status_code
return response def test2(urls):
# ------------------- requests 库请求-------------------------------------
reqs = [requests.get(url) for url in urls] # 用时7秒
return reqs cProfile.run("test1(urls)")
cProfile.run("test2(urls)")
2/1 0.001 0.000 1.645 1.645 <string>:1(<module>) # test1
2/1 0.000 0.000 12.089 12.089 <string>:1(<module>)  # test2

最新文章

  1. 【Redis】简介与安装
  2. django中自定义标签和过滤器
  3. 奇葩问题之ToolBar返回键失效
  4. STL学习小结
  5. 【HTML/XML 7】CSS层叠样式表
  6. 深入理解C# 静态类与非静态类、静态成员的区别
  7. CSS/块级元素与内联元素的深入理解
  8. mysql innodb 数据打捞(四)innodb 簇不连续页扫描提取(试验)
  9. SQL SELECT基本语句结构
  10. 内置函数:filter函数
  11. 【Learning】带花树——一般图最大匹配
  12. 微博评论箱的隐藏Bug解决
  13. pydoc用法
  14. 如何自动生成图片用于测试 pytorch(No image? No need image)
  15. Bluestein&#39;s Algorithm
  16. 剑指Offer 23. 二叉搜索树的后序遍历序列 (二叉搜索树)
  17. PB9.0连接sqlserver2008 R2
  18. Firefox,chrome,IE上传图片预览
  19. 算法训练 Lift and Throw
  20. [CEOI2008]order --- 最小割

热门文章

  1. mfc和qt的区别
  2. Java学习笔记十五:Java中的成员变量和局部变量
  3. 解决ssh连接中断程序终止的问题——tmux
  4. [Codefroces401D]Roman and Numbers(状压+数位DP)
  5. Strange RadioButton group behavior with ToolBar
  6. 通过c#操作word文档的其他方式
  7. ruby 技巧 根据函数的返回
  8. AT+CGDCONT=0,&quot;IP&quot;,&quot;ctnb&quot;设置问题
  9. Java基础知识总结一
  10. git服务器搭建及eclipse使用git