FastAPI — 타입이 곧 계약이다 · 계약과 수명 · 测验
FastAPI 확인
8道题. 完成作答后会显示正确答案和解析。
如果在 `async def` 处理器中调用 `time.sleep(1)`,会怎样?
- 只有该请求延迟 1 秒
- FastAPI 会自动将它移到线程中
- 会抛出异常
- 整个服务器在 1 秒内无法处理其他请求
将相同代码声明为 `def`(同步)后,有什么不同?
- FastAPI 会将它发送到线程池
- 只是声明方式不同,行为相同
- 由于线程切换,速度会变慢
- 请求正文的类型检查会关闭
收到不符合架构的正文时,FastAPI 返回什么状态码?
- 400 Bad Request
- 500 Internal Server Error
- 422 Unprocessable Entity
- 409 Conflict
`response_model` 最实用的效果是什么?
- 跳过序列化,使响应更快
- 响应中会移除未定义的字段
- 使用同一个模型验证请求正文
- 自动缓存响应
使用 `Depends` 创建的依赖项在测试中有什么优势?
- 无需修改生产代码即可替换
- 测试执行得更快
- 会自动生成模拟对象(mock)
- 处理器的类型提示会变得宽松
关于 `BackgroundTasks`,哪项描述正确?
- 它是类似 Celery 的分布式任务队列
- 它在发送响应后于同一进程中执行
- 它在独立的工作容器中执行
- 失败后会自动重试
使用 `uvicorn --workers 4` 启动时,需要注意什么?
- CPU 使用量始终变为四倍
- 必须开放 4 个端口
- async 处理器会变成同步
- 因为有 4 个进程,所以它们不共享全局变量
现在推荐用什么方式在启动时打开连接池?
- @app.on_event("startup")
- 直接在模块顶层打开
- lifespan 上下文管理器
- 在中间件处理第一个请求时打开