如何使用Python3.5并行执行多个web请求(不适用aiohttp

阅读时间 8 分钟> 作者的生产环境刚从2.6升级到3.5.0,但满足不了aiohttp的最低版本需求。所以在有了这篇文章,如何改造代码,充分利用python3.5 asyncio提供的异步功能。原文链接近日IT部门最终将我们工作环境的分布式Python版本升级到了3.5.0。这对...
摘要由CSDN通过智能技术生成

阅读时间 8 分钟

> 作者的生产环境刚从2.6升级到3.5.0,但满足不了aiohttp的最低版本需求。所以在有了这篇文章,如何改造代码,充分利用python3.5 asyncio提供的异步功能。原文链接


近日IT部门最终将我们工作环境的分布式Python版本升级到了3.5.0。这对从2.6版本来说是一次巨大的升级,但依然有些遗憾。3.5.0 不能满足一些库的最小版本需求,这其中就包括aiohttp。

尽管有这些限制,我依然需要写脚本从我们的API获取数以百计的csv文件,然后处理数据。Python本身并不想NodeJS那样基于事件驱动和原生异步,但这并不妨碍Python 也能实现一样的功能。这篇文档将详细介绍我如何学习异步操作,并列出它的优势。

声明: 如果你有更高的版本(3.5.2+),强烈推荐你使用aiohttp。这是个非常健壮的库, 特别适合解决这类问题。网上也有很多关于她的教程。

假设

作如下假设:

> * 熟悉Python和它的语法 > * 熟悉基础的网络请求 > * 知道异步执行的概念

开始

安装requests

$ python -m pip install requests

没有权限可以做如下安装

$ python -m pip install requests --user

错误的做法:同步请求

为了体现并行的好处,先看看同步的做法。我大概描述一下代码将要做什么。我们要执行一个能获取csv文件的GET请求,测量读取其中文本的时间。

我们将从这个网址(https://people.sc.fsu.edu/~jburkardt/data/csv/)下载多个csv文件, 里面有很多实例数据。

在说明一下,我们将用requests 库里 Session对象,执行GET请求。

首先,需要一个方法执行web请求:

def fetch(session, csv):
    base_url = "https://people.sc.fsu.edu/~jburkardt/data/csv/"
    with session.get(base_url + csv) as response:
        data = response.text
        if response.status_code != 200:
            print("FAILURE::{0}".format(url))
        # Return .csv data for future consumption
        return data

这个函数使用Session对象和csv名字,执行网络请求,然后返回response里的文本内容。

下面,我们需要一个函数遍历文件列表,然后去请求,统计执行请求的时间。

from timeit import default_timer()

def get_data_s
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值