python - 如何加快python后端发出大量http请求
问题描述
我正在尝试学习一些网络/后端的东西。我现在想构建一个 API,它发出一个 HTTP 请求,进行一些处理,发回一个响应。不是很有用,但它是为了学习。
我注意到获取请求是一个巨大的瓶颈。我认为这是一个 I/O 问题,因为响应非常小。现在我想我可以在多个线程上进行下载。如果我的虚构客户端发出请求,则需要将 URL 添加到池中,然后(由某个工作线程)获取并返回到工作线程,处理并发回。或类似的东西...
我真的不是专家,也许我刚才所说的没有任何意义......但我真的很感激一点帮助:)
解决方案
存在多种解决方案。您可以使用线程(线程池)或多处理(多处理池)并行执行多个请求。
或者您可以使用诸如 asyncio(或 twisted)之类的库以某种方式在一个线程中执行多个请求,等待 IO 不再是阻塞点。
我建议你看看:
https://docs.python.org/3/library/threading.html用于线程或https://docs.python.org/3/library/multiprocessing.html?highlight=multiprocessing#module-multiprocessing用于多处理。
在我看来,异步编程要困难得多,但如果好奇, 请查看https://docs.python.org/3/library/asyncio.html?highlight=asyncio#module-asyncio了解异步基础知识和https://docs .aiohttp.org/en/stable/ 用于与 asyncio“并行”执行多个 http 请求
玩了一会儿之后,你可能会有很多毛孔精确的问题。
只需发布您的代码,解释问题,您将获得更多帮助
推荐阅读
- git - 如何在 Git 中抑制或解决“信息:检测主机提供程序...”?
- javascript - 如何将反应 js 标题标题设置为数组的元素?
- pytorch - 使用 dataloader 在 pytorch 中进行替换采样
- nginx - 带有 nginx 入口的 Rabbitmq
- sql - 带有 TypeORM 的 PostgresQL 我可以从联结表中的 3 个实体实现复合主键吗?
- javascript - Chrome 上的 JavaScript Canvas SVG 线性渐变渲染
- jpa - 如何在 Spring Integration 中将事务范围限制为仅更新 JPA 出站网关(类似于“自动提交”)
- aws-lambda - AWS Lambda - (AccessDeniedException) 调用扫描操作时用户无权执行:dynamodb: Scan
- ios - 水平 UICollectionView 中的刷新控件
- ruby-on-rails - rails 5中唯一性的自定义验证消息