Python中如何使用XWeb高性能异步Web框架?

XWeb - 高性能异步 Web 框架。

XWeb

  • 框架使用了高性能的 uvloop+httptools.
  • 框架全部采用 python3.6 后的异步 async await 语法.
  • 框架架构参考了 koa.js.

优势

  • 高性能
  • 插件式
  • 全异步

Hello World

from xweb import App

app = App()

@app.use async def response(ctx): ctx.res.body = “Hello World”

if name == ‘main’: app.listen(8000)

koa.js 官方例子 xweb 版

import time

from xweb import App

app = App()

@app.use async def logger(ctx, fn): await fn() rt = ctx[‘X-Response-Time’] print(rt)

@app.use async def response_time(ctx, fn): start = time.time() await fn() usage = (time.time() - start) * 1000_000 ctx[‘X-Response-Time’] = f’{usage:.0f}µs’

@app.use async def response(ctx): ctx.res.body = “Hello World”

if name == ‘main’: app.listen(8000)

性能

  • 测试代码目录,为了公平,所有服务都启 4 个进程进行对。benchmarks/
  • 环境: iMac (Retina 4K, 21.5-inch, 2017), 3 GHz Intel Core i5, 8 GB 2400 MHz DDR4
  • 压测命令: wrk http://127.0.0.1:8000/ -c 100 -t 10 -d 10 -T 10

Requests/Sec:

  • xweb 90000
  • vibora 90000
  • meinheld + wsgi 77000
  • sanic 50000

规划(期待有兴趣的同学一起参与进来,创造全异步,高性能的 xweb 插件)

参考 koa.js 的插件开发 xweb 对应的插件,比如

  • Body parser
  • Data validator
  • Router
  • Auth
  • 等等

Github 地址

XWeb


Python中如何使用XWeb高性能异步Web框架?

6 回复

大佬又出现了


XWeb是一个基于asyncio的高性能异步Web框架,使用起来挺直接的。先安装:pip install xweb,然后写个简单的应用:

from xweb import App, Response, Request

app = App()

@app.route('/')
async def hello(request: Request):
    return Response(text='Hello XWeb!')

@app.route('/user/{name}')
async def user_info(request: Request, name: str):
    return Response(text=f'Hello {name}!')

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=8000)

跑起来后访问 http://127.0.0.1:8000/ 就能看到结果。路由支持路径参数,像上面的 {name} 会自动解析。请求处理函数必须是 async def,参数里可以拿到 Request 对象。

XWeb默认用uvicorn跑,性能不错。如果想调参数,比如用其他ASGI服务器或者改worker数,可以在 app.run() 里传 server='hypercorn' 或者 workers=4 这样的参数。

总结:装包、写路由、跑应用,就这么简单。

先前排膜拜一下大佬

谢谢楼主分享
其实光这么一个祼框架速度再高也是虚的。

计划有异步的 ORM 么?还是打算直接集成 sqlalchemy 之类的?
模板系统是打算用现成的如 jinja2 或是 mako 之类的。
还有 Session,cache 等
如果没这些基础设施光快也没用啊。

django 和 flask 之类的之所以流行主要是功能齐全,开发效率高。用 python 做 web 开发大多数都是运维项目或者管理后端之类的。要是真需速度就用 go 或 java 之类开发后端了,python 高并发下的靠谱程度还是差点儿。

思想源于 koa.js. 你说的这些都会以插件的形式出现。

#4 大佬书写的怎么样了

回到顶部