zoukankan      html  css  js  c++  java
  • 异步请求Python库 grequests的应用和与requests库的响应速度的比较

    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

  • 相关阅读:
    tinyxml优化之一
    vs下C++内存泄露检测
    Cocos2d-x项目移植到WP8系列之九:使用自定义shader
    [leetcode 双周赛 11] 1228 等差数列中缺失的数字
    [leetcode 周赛 158] 1224 最大相等频率
    [leetcode 周赛 158] 1223 掷骰子模拟
    [leetcode 周赛 158] 1222 可以攻击国王的皇后
    [leetcode 周赛 158] 1221 分割平衡字符串
    [leetcode 周赛 157] 1220 统计元音字母序列的数目
    [leetcode 周赛 157] 1219 黄金矿工
  • 原文地址:https://www.cnblogs.com/fanjp666888/p/9112786.html
Copyright © 2011-2022 走看看