iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >网络异步请求之gevent
  • 380
分享到

网络异步请求之gevent

求之网络gevent 2023-01-31 08:01:24 380人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

我们知道对于网络请求这种io bound的场景来说,最怕的就是某个请求阻塞了其余的操作,让并发性大大降低。今天就来介绍一款python下的并发库-gevent。 首先看一下他自己的介绍: gevent是一个基于libev的并发库。它为各种

我们知道对于网络请求这种io bound的场景来说,最怕的就是某个请求阻塞了其余的操作,让并发性大大降低。今天就来介绍一款python下的并发库-gevent。

首先看一下他自己的介绍:

gevent是一个基于libev的并发库。它为各种并发和网络相关的任务提供了整洁的api

嗯,确实很简洁,很易使用。待会我们就见识到了。

首先我们来看看传统的IO请求。
比如我们请求:Http://httpbin.org/ip 发个http get请求会得到我们的ip地址,如:

{
  "origin": "183.240.202.14"
}

我们来写个脚本连续发50个get请求到这个地址,以模拟多个请求。(脚本命名为get.py)

import requests

url = 'http://httpbin.org/ip'

for i in range(50):
    print("{}: {}".fORMat(i, requests.get(url).text))

统计一下运行时间:

$ time python3 get.py

(输出略...)
Python3 get.py  0.56s user 0.06s system 1% cpu 35.606 total

大概花费35s钟,当然不同网络环境可能结果不同。而且打印出来的结果是按照1, 2, 3...50这样的顺序来的,说明整个请求是同步的,一个请求结束再发下一个请求。

我们再来写一个gevent版的get.py,命名为gevent_get.py

import requests
import gevent
import gevent.monkey
# 这里将Socket变成异步
gevent.monkey.patch_socket()

url = 'http://httpbin.org/ip'


def hello(i):
    print("{}: {}".format(i, requests.get(url).text))


tasks = [gevent.spawn(hello, i) for i in range(50)]
gevent.joinall(tasks)

再来看看运行时间:

$ time python3 gevent_get.py

(输出略...)
python3 gevent_get.py  0.49s user 0.06s system 39% cpu 1.403 total

我的天!才1.4秒左右,而且打印出来的结果没有按照1, 2, 3...50这样排列,而是按照随机顺序排列的,说明整个请求是异步非阻塞的。

我又多试了几次,gevent的效率确实牛,远远高于同步io请求。最近在我的一个爬虫项目里面用进程池 + gevent,爬取80个页面,大概花费40s左右,每个页面只要0.5s,而且还包括DOM解析的时间,而用同步请求则花费大概300s左右。

gevent的更多用法请参考其官方文档。这么简单又好用的库赶紧试试吧。^_^

--结束END--

本文标题: 网络异步请求之gevent

本文链接: https://www.lsjlt.com/news/193411.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 网络异步请求之gevent
    我们知道对于网络请求这种IO bound的场景来说,最怕的就是某个请求阻塞了其余的操作,让并发性大大降低。今天就来介绍一款python下的并发库-gevent。 首先看一下他自己的介绍: gevent是一个基于libev的并发库。它为各种...
    99+
    2023-01-31
    求之 网络 gevent
  • nodejs 异步网络请求
    Node.js是一个基于Chrome V8引擎构建的JavaScript运行时环境,可以在服务器端使用JavaScript编写程序,支持异步I/O操作,适合于构建高并发、低延迟的网络应用程序。在使用Node.js开发网络应用程序时,使用异步...
    99+
    2023-05-18
  • uniapp网络请求异步同步
    在移动应用开发中,网络请求是常见的一项要求。uniapp作为一个跨平台开发框架,提供了网络请求的API,使得开发者能够方便地完成网络请求的操作。在网络请求中,异步和同步是两种不同的方式,下面将为大家介绍uniapp网络请求的异步和同步方式。...
    99+
    2023-05-22
  • java中怎么异步请求网络
    本篇文章给大家分享的是有关java中怎么异步请求网络,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。java怎么实现异步请求网络,这里实现思路有很多种,但是我们这里有个比较方便的...
    99+
    2023-06-02
  • Android Volley 异步网络请求分析
      Volley下载   Google I/O 2013 大会上发布的 Android 异步网络请求框架和图片加载框架。   试用场景:适合数据量小,通信频繁的网络操作...
    99+
    2022-06-06
    volley 异步 Android
  • Android HTTP网络请求的异步实现
    前言 大家都知道网络操作的响应时间是不定的,所有的网络操作都应该放在一个异步操作中处理,而且为了模块解耦,我们希望网络操作由专门的类来处理。所有网络数据发送,数据接收都有某几个...
    99+
    2022-06-06
    HTTP 异步 Android
  • Android网络请求之OkHttp
    OkHttp是一个第三方类库,用于android中请求网络。这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary)。用于替代HttpUrlConnectio...
    99+
    2022-06-06
    okhttp android网络请求 Android
  • Android最基本的异步网络请求框架
     本篇文章我们来一起写一个最基本的Android异步网络请求框架,借此来了解下Android中网络请求的相关知识。由于个人水平有限,文中难免存在疏忽和谬误,希望大家可...
    99+
    2022-06-06
    异步 框架 Android
  • Python爬虫之网络请求
    目录1.IP代理2.Cookie3.异常处理 1.IP代理 某些网站会检测一段时间内某IP的访问次数,若访问次数过多会禁止访问,这时需要设置一些代理服务器,每隔一段时间换一...
    99+
    2022-11-10
  • vue网络请求方案原生网络请求和js网络请求库
    一、 原生网络请求 1. XMLHttpRequest(w3c标准)    // 没有promise时的产物 当时的万物皆回调,太麻烦 2. Fetch    // html5提供的...
    99+
    2022-11-12
  • golang 异步请求
    随着互联网的快速发展,越来越多的应用需要与外部服务交互,而这些服务所提供的 API 往往都是异步的。在单线程的程序中,同步请求往往会造成程序的堵塞,影响程序的性能和响应速度。因此,在异步请求方面,golang 这门语言的独特设计可以让我们更...
    99+
    2023-05-18
  • Python async+request与async+aiohttp实现异步网络请求探索
    目录前言初始环境准备搭建测试用的后端1.threading requests2.async requests3.async aiohttp前言 在学习协程的时候,会有一个疑问,使用协...
    99+
    2022-11-11
  • vue网络请求方案原生网络请求和js网络请求库的示例分析
    这篇文章主要介绍vue网络请求方案原生网络请求和js网络请求库的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、 原生网络请求1. XMLHttpRequest(w3c标准)  &nbs...
    99+
    2023-06-21
  • Redux中进行异步操作(网络请求)的示例方案
    目录Redux中的异步操作组件中进行异步操作redux中进行异步操作Redux中的异步操作 在之前简单的案例中,redux中保存的counter是一个本地定义的数据 我们可以直接通过...
    99+
    2022-12-22
    Redux异步操作 Redux网络请求
  • Vue之Axios的异步请求问题详解
    目录遇到的问题总结遇到的问题 在目前一个需求中,我需要等待axios请求完成后,判断请求是否出现异常,然后来判断是否关闭弹窗 修改后大概代码如下: async submitForm(...
    99+
    2023-02-10
    Vue Axios异步请求 Vue异步请求
  • 爬虫学习之第一章网络请求
    爬虫的实际例子: 搜索引擎(百度、谷歌、360搜索等)。 伯乐在线。 惠惠购物助手。 数据分析与研究(数据冰山知乎专栏)。 抢票软件等。 什么是网络爬虫: 通俗理解:爬虫是一个模拟人类请求网站行为的程序。可以自动请求网页、并数据...
    99+
    2023-01-31
    爬虫 网络
  • Python爬虫之网络请求实例分析
    本篇内容介绍了“Python爬虫之网络请求实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.IP代理某些网站会检测一段时间内某IP的...
    99+
    2023-06-30
  • 小程序异步请求怎么改为同步请求
    小程序的网络请求默认是异步请求,无法直接改为同步请求。但是可以使用ES6的async/await来实现类似同步的效果。1. 在异步请...
    99+
    2023-10-20
    小程序
  • 【小程序】网络请求API介绍及网络请求的封装
    文章目录 网络请求基本演练和封装网络请求基本演练网络请求配置域名网络请求的封装 网络请求基本演练和封装 网络请求基本演练 微信提供了专属的API接口,用于网络请求: wx.req...
    99+
    2023-09-04
    小程序 网络 微信小程序
  • Android 网络请求框架解析之okhttp与okio
    安卓网络请求 先看一下今天的大纲 导入okhttp和okio依赖 禁用掉明文流量请求的检查 添加访问权限 布局及代码实现 运行结果 下面...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作