FastApi的隐形坑.md

2022/6/13 PythonWeb

# FastApi的隐形坑

大家好,这里是米洛,一个想和大家一起分享测试开发相关的技术,面试经验和成长经历的博主!

欢迎大家关注我的公众号: 米洛的测开日记

# 事情起因

今天写完了一部分功能,部署到我的阿里云服务器,使用官方的部署命令:

也不知道是我的服务器问题还是啥,我的一个测试登录接口的用例,在http请求的时候会卡住

这一卡不要紧呐,我发现我再开一个页面,其他接口都被阻塞了!!!!也就是说,此时整个服务都不可用了,我真的是人都傻了

# 做个简单的测试

因为FastApi很推崇大家用async的方式去写接口,所以我的代码里面基本上都是这种格式:

当你这么写了接口,但你的接口内部阻塞了,比如我刚才说的(http请求一直卡在那),这个时候其他接口会访问不了的。用FastApi的朋友,大家可以自测一下!

我的测试方式是:

  1. 随便改写一个接口,制造一个同步等待的场景,假设这时候你在读写文件,可能也需要花费一些时间的,所以我这里等待了1000秒,为了让大家看效果。
  2. 访问环境列表接口,这时候由于环境列表一直阻塞着,页面会处于pending状态。
  3. 访问其他接口,比如项目列表。

多的不说,上gif!

而不sleep的时候会这样,那我有个很大的疑问。如果我在下载一个文件,用了async模式,岂不是要玩完儿?

# 解决方案

  • 把async去掉,改为正常的模式,即使这里sleep很久也不会影响其他线程

  • 如果一定用async+sleep,可以用asyncio.sleep()这个方法

大家有兴趣的可以去测试下。

# 最新展示

展示一下最新的页面。