相关文章推荐
刚失恋的芒果  ·  基于k8s ...·  6 天前    · 
低调的炒面  ·  Shell - set命令 - ...·  7 月前    · 
风流倜傥的木瓜  ·  清理 Excel ...·  1 年前    · 

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 service
def 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) 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_routes async 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-service
  namespace: default
spec:
  selector:
    app: my-api
  ports:
    - protocol: TCP
      port: 8080
      targetPort: 8080
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: my-api-ingress
  namespace: default
  annotations:
    kubernetes.io/ingress.class: traefik
    traefik.frontend.rule.type: PathPrefix
spec:
  rules:
    host: api-beta.test.com
    http:
      paths:
      - path: /api
        backend:
          serviceName: my-api-service
          servicePort: 8080

host: api-beta.test.com

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

导入:import flask,json 实例化:api = flask.Flask(name) 定义接口访问路径及访问方式:@api.route(’/index’,methods=[‘get/post/PUT/DELETE’]) 定义函数,注意需与路径的名称一致,设置返回类型并支持中文:def index(): return json.dumps(ren,ensure_ascii=False) 三种格式入参访问接口: 5.1 url格式入参:flask.request.args.get(‘ 使用pyCharm编辑器创建项目,其实命令也可以,不过后面都肯定是要用编辑器的,这里就直接用编辑器了。 注意黄色框区域,环境又问题,可能需要自己找目录,如果有警告,需要自行选择python的安装目录找到python.exe。 随着 CPython3.6 的发布,asyncio(异步 io 标准库)的 API 正式稳定下来了,无疑利用 asyncio 写 web 应用将会极为方便。虽然 python 现有已经存在一些异步 IO 网络框架(twisted, tornado, gevent),但它们都不能很好的利用 python3 的新特性(比如 async/await 关键字),所以决定尝试一下 aiohttp 的 web... 前言今天这篇属于 asyncio 的应用篇,asyncio 的应用包括 web 服务端、爬虫应用、数据库连接库、分布式任务队列等领域。这里我们重点讲的是爬虫领域,使用的模块是 aiohttp。同样的和前面的教程一样,这里我们使用的 Python 版本同样为 3.8。关于 aiohttpPython 标准库的 asyncio 模块,内部实现了对 TCP、UDP、SSL 协议的异步操作方式,但是没有直... 很多朋友对异步编程都处于“听说很强大”的认知状态。鲜有在生产项目中使用它。而使用它的同学,则大多数都停留在知道如何使用 Tornado、Twisted、Gevent 这类异步框架上,出现各种古怪的问题难以解决。而且使用了异步框架的部分同学,由于用法不对,感觉它并没牛逼到哪里去,所以很多同学做 Web 后端服务时还是采用 Flask、Django等传统的非异步框架。从上两届 PyCon 技术大会看来... aiohttp介绍官网上有这样一句话介绍:Async HTTP client/server for asyncio and Python翻译过来就是 基于asyncio和Python实现的异步HTTP客户端/服务器asyncio可以实现单线程并发IO操作。也就是做异步操作。如果仅用在客户端,发挥的威力不大。如果把asyncio用在服务器端,例如Web服务器,由于HTTP连接就是IO操作,因此可以用... 在服务器上安装 Python。 在服务器上安装一个 Web 框架,例如 Flask 或 Django。Web 框架是一组工具,可以轻松创建基于 Web 的应用程序。 创建一个 Python 文件,在文件中编写代码来定义您的 API 的功能。例如,您可以定义一个路由,该路由接收 HTTP 请求并返回相应的响应。 在服务器上运行您的... 想要快速搭建自己的API服务?本文教会你用Python完成最简单最快速的搭建!前言曾几何时,我还在用着Django+jsonrpc,做自己的API服务。一个字:”慢”,两个字:”难写“,三个字:“难搭建”。当初做API服务的需求主要是有两个项目需要远程服务器执行Python代码,返回JSON数据。一个是高校快递帮,是我和ringotc还有我的一个发小一起完成的,是微信小程序大赛作品。另一个是Fam...