使用uvloop和httptools构建的高性能web框架。

xweb的Python项目详细描述


logo

BuildLicensePypiPython

使用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 i58 GB 2400 MHz DDR4
  • 测试命令:wrk http://127.0.0.1:8000/ -c 100 -t 10 -d 10 -T 10
FrameworksRequests/SecVersion
xweb1000000.1.1
vibora900000.0.6
meinheld + wsgi770000.6.1
sanic500000.7.0

展开并运行

python app.py

测试

  1. pip install -r requirement.txt
  2. pytest --cov xweb.py

贡献

构建中间件。

xweb的灵感来自koajs。我需要一些在koa中编写中间件的帮助。例如:

  1. 体分析器将原始字节体转换为dict或file
  2. 数据验证程序。具有高性能的异步数据验证器
  3. 路由器像koa路由器这样的高性能路由器。
  4. 等等。

公开发行。

  1. 建议。
  2. 虫子

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Java RMI客户端访问被拒绝   java让JavaFX事件监听器与我的方法对话   java与xml spring配置相关   java当我在字符串中插入这个XML Soap请求时,为什么Eclipse会给我一个错误?   音频音频合成   java创建了一个Tic-Tac-Toe应用程序,我有一个bug,它每次在同一个正方形上声明一个平局   java为返回的字符串值设置参数   Java中的ClassFormatError   java在启动后更改Spring云配置服务器uri   用Java中的自定义类替换默认字符串类   java junit测试套件:ClassNotFoundException   java自定义对象集包含相同的对象   通过关系查找的java Spring数据CRUDepository   java将数据存储到aerospike中   java使用itextpdf将添加内容的pdf转换为安卓中的位图   java正在遍历队列的concurrentHashMap,以查看是否所有队列都是空的,而其他线程可能会添加到队列中   java Hibernate:未找到本机查询异常   java Mockito准确地验证所有参数   java我可以在它自己的类中声明一个对象吗?