Python 有大佬使用过 flask 框架并且用异步开发的么,就是 async/await 那一套

一枚老男孩 · 2022年10月24日 · 最后由 回复于 2022年10月28日 · 6099 次阅读

最近在学习 python 异步相关的知识,看完就觉得会了便想使用到项目中去,但是真正使用后发现自己还是不会。
有这样一种场景,就是需要同时去数据库里查一堆数据,之前的实现方式是单线程后来改成了多线程,查询效率提升了很多;最近想试试能不能用异步来实现同样的效果,毕竟官方文档上 asyncio 也是支持并发的,但是经过一通改造发现性能和单线程差不多。
特此来社区请教各位大佬

共收到 11 条回复 时间 点赞

做测试平台?

没深入了解,浅谈下楼主的场景:同时查询场景下多线程相比较异步是更佳的选择,我理解的异步的适用场景是异步接口调用或者接口处理时间较长的情况下,以异步的方式来避免此接口对整体流程的阻塞

我用 celery 做的异步

refrain 回复

celery 我理解应该是一个后台任务框架,我这里是希望用异步来解决查询效率的问题哈

的确是这样,但是 python 官方文档上是说异步其实也是支持并发的,但是我在应用到 flask 项目中的时候,貌似没有达到并发的效果

hao 回复

测试平台已经有了,想对其中的一些实现做优化,刚好最近在看 python 异步相关的知识,就想试试能否应用到项目中去

哈哈,去了解下

你是不是使用方式上有差错啊,将多个查询接口都进行异步调用的话不就实现并发了吗,你没达到并发的场景是怎样的

这个可能不太好描述,不过大概率应该是最下层的原子操作(数据库查询方法)没有实现异步,这个我自己再试下,感谢大佬的回复

没有必要,flask 的多线程是每个请求到达之后创建一个线程进行处理,这个线程在消息返回之后销毁,因为线程内保存了请求的上下文信息,所以不可能利用这个线程在 IO 的时候再去处理其他请求。并且线程遇到 IO 会暂时挂起,不会消耗太多 cpu,加入额外的异步处理,只会让业务更加复杂,并且性能没有提升。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册