使用uvloop和httptools构建的高性能web框架。
xweb的Python项目详细描述
使用uvloop和httptools构建的高性能web框架
在xweb中,一切都是异步的。
功能
- 高性能
- 异步。
- 很小。
要求
- Python3.6+
安装
pip install xweb
开始
你好世界
fromxwebimportAppapp=App()@app.useasyncdefresponse(ctx):ctx.res.body="Hello World"if__name__=='__main__':app.listen(8000)
中间件示例。
中间件是一个异步函数或异步可调用对象,它看起来像:async def logger(ctx, fn)
# app.pyimporttimefromxwebimportAppapp=App()@app.useasyncdeflogger(ctx,fn):awaitfn()rt=ctx['X-Response-Time']print(rt)@app.useasyncdefresponse_time(ctx,fn):start=time.time()awaitfn()usage=(time.time()-start)*1000_000ctx['X-Response-Time']=f'{usage:.0f}µs'@app.useasyncdefresponse(ctx):ctx.res.body="Hello World"if__name__=='__main__':app.listen(8000)
中间件
应用程序
- 应用程序使用(fn)
- app.listen(host='127.0.0.1',port=8000,debug=true)
上下文
- ctx要求
- ctx.res
- ctx.send
- ctx.abort(self,status,msg=”,properties=”)
- ctx.check(self,value,status=400,msg='',properties=)
请求
ctx.req
是请求对象。
- ctx.req.headers dict
- ctx.req.method str
- ctx.req.url str
- ctx.req.raw字节
- ctx.req.ip str
响应
ctx.res
是请求对象
- ctx.res.body str
- ctx.res.status整数
- ctx.res.msg字符串
- ctx.res.headers dict
基准
- 基准测试/中的基准代码
- 环境:
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
Frameworks | Requests/Sec | Version |
---|---|---|
xweb | 100000 | 0.1.1 |
vibora | 90000 | 0.0.6 |
meinheld + wsgi | 77000 | 0.6.1 |
sanic | 50000 | 0.7.0 |
展开并运行
python app.py
。
测试
pip install -r requirement.txt
pytest --cov xweb.py
贡献
构建中间件。
xweb的灵感来自koajs。我需要一些在koa中编写中间件的帮助。例如:
- 体分析器将原始字节体转换为dict或file
- 数据验证程序。具有高性能的异步数据验证器
- 路由器像koa路由器这样的高性能路由器。
- 等等。
公开发行。
- 建议。
- 虫子