首页 > 编程语言 >Python 协程池,异步IO非阻塞式,http 请求

Python 协程池,异步IO非阻塞式,http 请求

时间:2023-06-09 10:34:13浏览次数:47  
标签:__ http async Python 协程池 import return def

先写个 Flask demo

import time
from flask import Flask
app = Flask(__name__)

@app.route('/<id>')
def hello(id):
    time.sleep(2)
    return 'Hello, World!: %s' % id

if __name__ == '__main__':
    app.run()

协程请求


import asyncio
import timeit
from concurrent.futures import ThreadPoolExecutor


def async_pool(pool_size):
    def async_func(func):
        async def wrapper(*args, **kwargs):
            loop = asyncio.get_running_loop()
            with ThreadPoolExecutor(max_workers=pool_size) as executor:
                result = await loop.run_in_executor(executor, func, *args, **kwargs)
            return result

        return wrapper

    return async_func


import requests


@async_pool(5)
def get(url):
    response = requests.get(url)
    return response.text


async def main():
    urls = [
        'http://127.0.0.1:5000/1',
        'http://127.0.0.1:5000/2',
        'http://127.0.0.1:5000/3',
        'http://127.0.0.1:5000/4',
    ]
    tasks = [asyncio.create_task(get(url)) for url in urls]
    results = await asyncio.gather(*tasks)
    return results



if __name__ == '__main__':
    rsp = asyncio.run(main())
    print(rsp)
    print("运行时间为: ", timeit.timeit(lambda: asyncio.run(main()), number=1), "秒")

终端输出

['Hello, World!: 1', 'Hello, World!: 2', 'Hello, World!: 3', 'Hello, World!: 4']
运行时间为:  2.0162846040000004 秒

标签:__,http,async,Python,协程池,import,return,def
From: https://www.cnblogs.com/l806760/p/17468459.html

相关文章

  • jmeter-http请求中post请求
    1、选择取样器-http请求,填写完整web服务器信息、http请求选择post、路径写请求路径(注意从/开始)2、2.1post请求数据为map格式(键值对),直接将键值对添加到参数表中即可 2.2post请求数据为json格式,将json格式的请求数据加到bodydata中,在请求头文件中添加Content-Type的值为appli......
  • Python爬虫基础知识点
    Python爬虫是使用Python编写的程序,可以自动抓取互联网上的数据。常用的Python爬虫框架包括Scrapy、BeautifulSoup、Requests等。Python爬虫可以应用于众多场合,如大数据分析、信息监测、数据挖掘和机器学习等领域。那么新手应该如何学习python爬虫呢?以下是Python爬虫的基础知识:1......
  • 如何用get方式、post方式向http接口发送数据
    1.项目环境如下:myeclipse6.5、tomcat5.0、system:xp、JDK:开发1.5,编译1.4为了方便,在原来的web项目UpDown中新建了一个httpcall包,用来保存http接口和调用的客户端。2.准备需要的jar包*commons-httpclient-3.0.jar*commons-logging.jar*commons-codec-1.3.jar......
  • jmeter-http信息头管理器
    将requestheads中的键值对统一放到配置元件-http信息头管理器中http信息头管理器分为两种公共的、私有的如果是统一添加的直接添加一个公共的http信息头管理器即可;如果请求的头文件中有特殊的键值对,那么单独在请求下添加一个http信息头管理器即可 ......
  • HTTP请求中GET请求为何有长度限制?
    HTTP协议并没有规定GET请求URL的长度限制,但是实际上在使用中会存在长度限制。造成GET请求URL长度限制的原因主要有以下两点:浏览器限制。不同的浏览器对URL长度的限制不同,一般来说,在地址栏中输入的URL长度范围在2,000个字符左右,超过这个长度可能会被浏览器截断。......
  • HTTP1\2\3 和 https 分别是什么?
    http1,http2http3和https有什么区别HTTP/1.0和HTTP/1.1是早期的HTTP协议版本,而HTTP/2(也称为HTTP/2.0)和HTTP/3(也称为QUIC)是后续的协议版本。以下是它们之间的主要区别:HTTP/1.x:HTTP/1.x是一种基于文本的协议,使用明文传输数据。每个请求都需要建立一个新的连接,并且请求和响应......
  • c# HttpClient超时重试
    //调用方式3秒后超时重试2次.netframework4.5HttpMessageHandlerhandler=newTimeoutHandler(2,3000);using(varclient=newHttpClient(handle......
  • 怎么快速掌握Python爬虫技术?
    Python总的来说是一门比较容易入门的编程语言,因为它的语法简洁易懂,而且有很多优秀的教程和资源可供学习。相比其他编程语言,Python的学习曲线较为平缓,初学者可以很快上手,但要想深入掌握Python,还需要不断地学习和实践。总的来说,Python学习并不难,只要有兴趣和耐心,坚持不懈地学习,就......
  • python 爬虫某东网商品信息 | 没想到销量最高的是
    哈喽大家好,我是咸鱼好久没更新python爬虫相关的文章了,今天我们使用selenium模块来简单写个爬虫程序——爬取某东网商品信息网址链接:https://www.jd.com/完整源码在文章最后元素定位我们需要找到网页上元素的位置信息(xpth路径)我们首先需要知道搜索框和搜索按钮的位置,然......
  • gprc python调用c++远程服务
      客户端和服务端之间不是直接通信的,需要通过生成的代码和protocolbuffers传输协议(可使用其他传输协议替换)进行通信。开发步骤:  1..proto文件----message和servicemessage是消息类型,定义参数,service是接口类型,定义远程服务的方法在grpc中有四种类型的服务方法:参考......