FastAPI 中的并发请求与并行请求
在 FastAPI 中,存在一个常见的误解,即为什么异步定义端点并不总是在平行线。这种行为不是由 FastAPI 的设计引起的,而是与 FastAPI 如何利用异步编程有关。
使用 def 端点时,FastAPI 在单独的线程中同步运行它们,从而实现并发。然而,async def 端点通常直接在事件循环中执行,从而确保代码与异步 I/O 操作交互时的并发性和并行性。
FastAPI 中的同步与异步代码
FastAPI 通过 async def 支持异步代码,它允许使用 wait 将控制权传递回事件循环。此功能支持非阻塞操作,例如等待来自客户端的数据或数据库响应。但是,如果在 async def 端点中使用同步任务(如 time.sleep()),它会阻塞事件循环并最终阻塞服务器,从而导致请求的顺序处理。
外部线程池
为了确保阻塞任务不会阻碍事件循环,FastAPI 使用外部线程池,它在单独的线程上运行用 def 定义的任务并等待在恢复事件循环执行之前它们。这种方法实现了 def 端点的并发性,即使它不是真正的并行化。
最佳实践
以上是并发与并行:FastAPI 如何处理请求?的详细内容。更多信息请关注PHP中文网其他相关文章!