ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

异步http框架-httpx,实现异步协程请求url

2022-07-20 18:32:51  阅读:164  来源: 互联网

标签:异步 http async url sync 线程 time 协程 httpx


"""

协程介绍:
    什么是协程?
        简单来说,协程是一种基于线程之上,但又比线程更加轻量级的存在。对于系统内核来说,协程具有不可见的特性,所以这种由 程序员自己写程序来管理 的轻量级线程又常被称作 "用户空间线程"。

    协程比多线程好在哪呢?
        1. 线程的控制权在操作系统手中,而协程的控制权完全掌握在用户自己手中,因此利用协程可以减少程序运行时的上下文切换,有效提高程序运行效率。

        2. 建立线程时,系统默认分配给线程的栈大小是 1 M,而协程更轻量,接近 1 K ,因此可以在相同的内存中开启更多的协程。

        3. 由于协程的本质不是多线程而是单线程,所以不需要多线程的锁机制。因为只有一个线程,也不存在同时写变量而引起的冲突。
        在协程中控制共享资源不需要加锁,只需要判断状态即可。所以协程的执行效率比多线程高很多,同时也有效避免了多线程中的竞争关系。

协程的适用 & 不适用场景:
    适用场景:协程适用于被阻塞的,且需要大量并发的场景。
    不适用场景:协程不适用于存在大量计算的场景(因为协程的本质是单线程来回切换),如果遇到这种情况,还是应该使用其他手段去解决。

http框架-httpx 介绍:
    是一个几乎继承了所有 requests 的特性并且支持 "异步" http 请求的开源库。
    简单来说,可以认为 httpx 是强化版 requests。
"""

import asyncio
import httpx
import threading
import time


# httpx 同步请求
def sync_main(url, sign):
    response = httpx.get(url).status_code
    print(f'sync_main: {threading.current_thread()}: {sign} + {response}')

sync_start = time.time()
[sync_main(url='http://www.baidu.com', sign=i) for i in range(30)]
sync_end = time.time()
# 运行耗时
print(sync_end - sync_start)



# httpx 异步请求
client = httpx.AsyncClient()
async def async_main(url, sign):
    response = await client.get(url)
    status_code = response.status_code
    print(f'async_main: {threading.current_thread()}: {sign}:{status_code}')

loop = asyncio.get_event_loop()
tasks = [async_main(url='http://www.baidu.com', sign=i) for i in range(30)]
async_start = time.time()
loop.run_until_complete(asyncio.wait(tasks))
async_end = time.time()
loop.close()
# 运行耗时
print(async_end - async_start)

 

标签:异步,http,async,url,sync,线程,time,协程,httpx
来源: https://www.cnblogs.com/xiao-bai-long/p/16499386.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有