aiohttp介绍

官网上有这样一句话介绍:Async HTTP client/server for asyncio and Python

翻译过来就是 基于asyncio和Python实现的异步HTTP客户端/服务器

asyncio可以实现单线程并发IO操作。也就是做异步操作。

如果仅用在客户端,发挥的威力不大。如果把asyncio用在服务器端,例如Web服务器,由于HTTP连接就是IO操作,因此可以用单线程+coroutine实现多用户的高并发支持。

asyncio实现了TCP、UDP、SSL等协议,aiohttp则是基于asyncio实现的HTTP框架。

aiohttp的定位和使用场景

以前java要做一个web服务或者api服务 都需要使用springMVC 或者 Struts等框架,现在java有了比较轻量级的Springboot框架,可以很快构建一个可以提供api的web服务。

python以前想提供api或者web服务,也是需要使用Django或者Flask等框架。不过这些框架都比较重,
aiohttp很轻量,可以对标java中的Springboot。

只需要简单的几行代码,就能把你当前的项目转换成一个 具有api功能的web项目。

主要特点

支持客户端和HTTP服务器。

无需使用Callback Hell即可支持Server WebSockets和Client WebSockets。

Web服务器具有中间件,信号和可插拔路由。

参考资料

官网

快速搭建一个web服务端

github

pypi中的aiohttp包信息

Python-aiohttp百万并发测试和使用经验
经验:任何时候,你在等待什么的时候,记得使用await。

How to create REST API using aiohttp

在原项目基础上集成aiohhtp-让python项目提供api服务

如果我们已经有了一个项目,想让它具备提供api服务的能力,步骤如下:

引入aiohttp包

在requirements文件或者pyproject.toml文件中添加

aiohttp = "^3.5"

新建路由文件

routes.py

import  api_module.service as servicedef setup_routes(app):# 测试app.router.add_get('/api/{name}/test', service.test)#app.router.add_post('/api/{name}/test', service.test)#app.router.add_put('/api/{name}/test', service.test)

新建服务文件(具体业务的文件)

service.py


from aiohttp import web# 获取 module 详情
async def test(request):#put或者post方式参数获取#data = await request.json()#name = data["name"]#print('请求的信息data为: %s' % str(data))# /api/{name}/test路径中的值获取方式name = request.match_info['name']#/api/test?name=joe 参数获取方式#query = request.query#name = query.get("name")print(name)try:return web.json_response({'code': 0, 'data': name})except Exception as e:return web.json_response({'msg': e.value}, status=500)

main文件中增加启动web命令

main.py


from aiohttp import web
from api_module.routes import setup_routesasync def start_init_test(app):print("初始化操作")async def end_init_test(app):print("清理操作")def main():app = web.Application()setup_routes(app)app.on_startup.append(start_init_test)app.on_cleanup.append(end_init_test)web.run_app(app)if __name__ == "__main__":main()

启动web方式

启动main文件即可
使用命令

python3.7 main.py

如果是 poetry项目 pyproject.toml文件中使用

[tool.poetry.scripts]
start = '项目名.main:main'例如[tool.poetry.scripts]
start = 'api_module.main:main'

启动使用命令

start

启动完成后输出如下:

初始化操作
======== Running on http://0.0.0.0:8080 ========
(Press CTRL+C to quit)

浏览器中测试访问

http://127.0.0.1:8080/api/joe/test

返回如下:

{"code": 0, "data": "joe"}

如图:

增加ingress

如果是k8s的项目 需要增加ingress对外公开api
deploy.yml 中增加ingress的信息

apiVersion: v1
kind: Service
metadata:name: my-api-servicenamespace: default
spec:selector:app: my-apiports:- protocol: TCPport: 8080targetPort: 8080
---apiVersion: extensions/v1beta1
kind: Ingress
metadata:name: my-api-ingressnamespace: defaultannotations:kubernetes.io/ingress.class: traefiktraefik.frontend.rule.type: PathPrefix
spec:rules:-host: api-beta.test.comhttp:paths:- path: /apibackend:serviceName: my-api-serviceservicePort: 8080

host: api-beta.test.com

path: /api
需要对应替换成自己的域名和需要的路径

python--web--让python提供api服务--aiohttp相关推荐

  1. go vs python 对接外部web api_python--web--让python提供api服务--aiohttp-Go语言中文社区

    aiohttp介绍 官网上有这样一句话介绍:Async HTTP client/server for asyncio and Python 翻译过来就是 基于asyncio和Python实现的异步HT ...

  2. python web开发-Python Web开发从入门到精通

    Python Web开发从入门到精通循序渐进地讲解了Python Web开发的核心知识,并通过具体实例的实现过程演示了Web开发程序的流程.Python Web开发从入门到精通共15章,内容包括Pyt ...

  3. 整理了6个Python经典项目(python爬虫、python人工智能、python数据分析、python web、python办公自动化、python游戏),送给正在求职的你

    前言 职场中一贯有"金三银四"."金九银十"的说法.尤其是3.4月刚过完年后,很多企业的员工会选择离职,大量空缺职位被放出,同时HR招聘压力增大,求职者往往可以 ...

  4. ginapi服务器性能,基于gin web框架搭建RESTful API服务

    这篇主要学习go项目中的项目结构.项目规范等知识,ROM采用的database/sql的写法. 1.技术框架 利用的是ginweb框架,然后ROM层选用database/sql,安装mysql驱动.安 ...

  5. 券商研发的交易系统也要通过Python来提供API吗?

    一般券商研发的交易系统,以GF Quant Genius(广发证券旗下)为例, 数据方面:2005年以来的股票行情数据.市值数据.财务数据.上市公司基本信息.融资副券信息,商品期货行情数据,基金行情及 ...

  6. pythonweb开发-5个最好的Python Web开发框架

    原标题:5个最好的Python Web开发框架 Python是最受欢迎的和最有效率的开发语言之一.Python能让你更快完成工作,并且更有效地集成系统.Python是动态的面向对象的语言.即便你刚刚开 ...

  7. python web为什么不火-Python这么火,为何有人说Python不好找工作?

    原标题:Python这么火,为何有人说Python不好找工作? Python编程近两年来可谓是C位出道,吸引了无数编程圈里圈外人的围观,有的人想要借机突破自己的职业瓶颈,有人想要借机突破自己的薪酬瓶颈 ...

  8. python 前端框架比较_浅谈五大Python Web框架

    说到Web Framework,Ruby的世界Rails一统江湖,而Python则是一个百花齐放的世界,各种micro-framework.framework不可胜数,不完全列表见: 虽然另一大脚本语 ...

  9. 小白都能看懂的实战教程 手把手教你Python Web全栈开发(DAY 1)

    小白都能看懂的实战教程 手把手教你Python Web全栈开发 Flask(Python Web)实战系列之在线论坛系统 第一讲 博主博客文章内容导航(实时更新) 更多优质文章推荐: 收藏!最详细的P ...

最新文章

  1. Spring复习笔记:4
  2. 操作系统学习:启动进入实模式
  3. open AI 在DOTA 5v5 比赛中战胜职业选手
  4. 包画三维散点图怎么导出_不开玩笑,发现宝藏了,一键导出场地三维模型,连贴图都有!...
  5. python简单代码hello-树莓派完成简单的编程(四)
  6. Kingbase和PostgreSQL中如何查看当前连接的进程信息
  7. argumentoutofrangeexception:长度不能小于0_数组长度属性背后的魔力有哪些?
  8. java string的某个字符_JAVA如何提取String中字符串的某个字符 具体内容
  9. [转] openssl dgst命令完成SHA256哈希校验和RSA数字签名
  10. python分词词典_基于python的分词算法的实现(3) – 建立字典 | 学步园
  11. 批量增加dns 条件转发器
  12. 基于PHP的网上购物网站设计(含源文件)
  13. win7虚拟光驱+iso文件升级win10
  14. 超级计算机每秒几兆次,这台超级计算机能在1秒内计算出你需要60亿年的时间
  15. C++ 在栈上分配内存
  16. Blender程序化建模教程【Python】
  17. 钕铁硼的尺寸与形位公差
  18. 跟风“涨价”,品牌老化,为何“0糖”的奥利奥不被消费者买账?
  19. iterm2连不上阿里云服务器
  20. 翔工作室网站策划逻辑图:(online.cumt.edu.cn)

热门文章

  1. 智能门铃app开发的功能有哪些
  2. 为什么用功率谱密度来描述随机信号?
  3. 【Unity大气散射】GAMES104:3A中如何实现大气散射
  4. 图解图库JanusGraph系列-一文知晓“图数据“底层存储结构(JanusGraph data model)
  5. ClickHouse中文官方文档
  6. 开发群发微信图文消息,正文中的图片却不显示问题
  7. 实现统一社会信用代码校验
  8. 系统迁移到固态硬盘--高贵的ASUS版
  9. CAD如何删除图层 显示未删除选定图层
  10. Android调用系统相机拍摄视频以及获取缩略图