之前一直在使用flask框架做一些工具性的应用,所以也没有因为性能影响,知道有一次工作中要在flask中读取一个比较大的文件,只能去使用asyncio避免io阻塞。后来自己也在网上了解和被同事安利了quart和sanic这两个异步框架,这两个框架都是基于uvloop的,quart更像flask,甚至可以patch一下就可以使用flask的扩展,而且已经实现了http2.不过浏览了一下github,发现sanic更受开发者的欢迎,有许多特别帮的sanic扩展,使用sanic也不久大概1个多月吧,大概使用下来sanic有这几点让我感觉还不错。
1.app.run(host='',post=xxx,workers=4)
sanic可以在原生的启动里直接使用多线程启动,只要设置一下workers,但是这个方法会导致很多问题,比如使用想加入后台定时任务,使用app.add_task(test()),启动以后test()会运行四次,不得不老老实实使用celery。
2.HTTPMethodView
sanic这个模块十分良心,感觉也没有必要去使用蓝图,只需要在class下写好相应的方法,最后把它app.add_route(view, '/')就搞定了。
3.Middleware
sanic的中间件使用率还是非常高的,比如初始化数据库的线程池,aiohttp的连接池之类的
当然让我选择sanic比较重要的因素还是它的扩展丰富和源代码的更新速度较快;有几个是我比较经常使用的扩展。
1.sanic-jwt(token)和sanic-auth(session) 包含了基本的用户认证和路由保护
2.gino 一个asyncpg的的sqlachmedy
3.sanic-cors 实现跨域访问很方便的扩展
关于其他扩展由于不太需要所以没有怎么额使用过
HTTP2:
sanic到目前为止并没有merge http2模块,好像是因为使用http2会使请求速度减慢35%,期待在不久sanic可以使用http2.
最后欢迎使用sanic大神指教!