解决 FastAPI 异步路由中无限循环导致的死锁问题

碧海醫心

碧海醫心

2025-09-24

632人浏览

原创

解决 fastapi 异步路由中无限循环导致的死锁问题

在 FastAPI 应用中,如果需要在异步路由中执行无限循环,直接使用 while True 可能会导致整个应用死锁,其他路由无法响应。这是因为异步函数在执行时,如果没有适当的让出控制权,会阻塞事件循环,导致 FastAPI 无法处理其他请求。下面将介绍两种避免死锁的解决方案。

使用 BackgroundTasks

FastAPI 提供了 BackgroundTasks 类,可以将耗时任务放入后台执行,从而避免阻塞主线程。这种方式非常适合处理无限循环任务。

from fastapi import FastAPI, BackgroundTasks
import random

app = FastAPI()

@app.get("/hello")
async def hello():
    return {"Hello": "World"}

@app.get("/normal")
def route_normal():
    while True:
        print({"route_normal": random.randint(0, 10)})

@app.get("/async")
async def route_async(background_tasks: BackgroundTasks):
    def background_task():
        while True:
            print({"route_async": random.randint(0, 10)})

    background_tasks.add_task(background_task)
    return {"message": "Background task started"}

代码解释:

  1. 导入 BackgroundTasks 类。
  2. 在异步路由 route_async 中,声明一个 background_tasks 参数,类型为 BackgroundTasks。FastAPI 会自动注入该对象。
  3. 定义一个 background_task 函数,其中包含无限循环。
  4. 使用 background_tasks.add_task() 将 background_task 函数添加到后台任务队列。
  5. 路由函数立即返回一个消息,表示后台任务已启动。

注意事项:

度加AI
度加AI

度加AI官网入口,百度官方 AIGC 创作平台,支持 AI 成片、AI 生文、数字人、声音克隆、配音字幕与智能剪辑等在线创作能力。

下载
  • 后台任务的执行与主线程是并发的,因此需要注意线程安全问题。
  • BackgroundTasks 适用于执行不需要立即返回结果的任务。

使用 asyncio.sleep()

另一种解决方案是在无限循环中加入 asyncio.sleep(),让出控制权,允许事件循环处理其他任务。

import asyncio
from fastapi import FastAPI
import random

app = FastAPI()

@app.get("/hello")
async def hello():
    return {"Hello": "World"}

@app.get("/normal")
def route_normal():
    while True:
        print({"route_normal": random.randint(0, 10)})

@app.get("/async")
async def route_async():
    while True:
        await asyncio.sleep(0) # do a sleep here so that the main thread can do its magic, at least once per loop, changing the sleep duration will allow the main thread to process other threads longer, please read up more on the specifics
        print({"route_async": random.randint(0, 10)})

代码解释:

  1. 导入 asyncio 模块。
  2. 在异步路由 route_async 的无限循环中,使用 await asyncio.sleep(0) 让出控制权。

注意事项:

  • asyncio.sleep(0) 会立即让出控制权,允许事件循环处理其他任务。
  • 可以调整 asyncio.sleep() 的参数,控制让出控制权的时间。参数越大,其他任务获得执行的机会越多,但当前任务的执行速度会降低。
  • 这种方法适用于对实时性要求不高的任务。

总结

在 FastAPI 异步路由中使用无限循环时,需要特别注意避免阻塞事件循环。使用 BackgroundTasks 可以将任务放入后台执行,而使用 asyncio.sleep() 可以让出控制权。选择哪种方案取决于具体的应用场景和需求。如果任务不需要立即返回结果,且对实时性要求不高,建议使用 BackgroundTasks。如果需要在循环中进行一些操作,且对实时性有一定的要求,可以使用 asyncio.sleep()。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

路由优化大师
路由优化大师

路由优化大师是一款及简单的路由器设置管理软件,其主要功能是一键设置优化路由、屏广告、防蹭网、路由器全面检测及高级设置等,有需要的小伙伴快来保存下载体验吧!

下载

相关标签:

路由

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API
Python FastAPI异步API开发_Python怎么用FastAPI构建异步API

Python FastAPI 异步开发利用 async/await 关键字,通过定义异步视图函数、使用异步数据库库 (如 databases)、异步 HTTP 客户端 (如 httpx),并结合后台任务队列(如 Celery)和异步依赖项,实现高效的 I/O 密集型 API,显著提升吞吐量和响应速度,尤其适用于处理数据库查询、网络请求等耗时操作,无需阻塞主线程。

2025.12.22

77

5

Python 微服务架构与 FastAPI 框架
Python 微服务架构与 FastAPI 框架

本专题系统讲解 Python 微服务架构设计与 FastAPI 框架应用,涵盖 FastAPI 的快速开发、路由与依赖注入、数据模型验证、API 文档自动生成、OAuth2 与 JWT 身份验证、异步支持、部署与扩展等。通过实际案例,帮助学习者掌握 使用 FastAPI 构建高效、可扩展的微服务应用,提高服务响应速度与系统可维护性。

2026.02.06

370

18

Python Web框架FastAPI 全栈开发教程合集
Python Web框架FastAPI 全栈开发教程合集

以 FastAPI 为核心,讲解现代 Python Web API 的高效开发方式,涵盖路由定义与路径参数/查询参数/请求体绑定、Pydantic 模型的数据校验与序列化、依赖注入(Depends)系统的分层设计、中间件与 CORS 配置、OAuth2 + JWT 认证流程、后台任务(BackgroundTasks)、WebSocket 实时通信、SQLAlchemy 异步 ORM 集成、自动生成 OpenAPI/Swagger 交互文

2026.05.09

153

23

Python FastAPI异步微服务与高性能接口设计
Python FastAPI异步微服务与高性能接口设计

本专题聚焦 Python FastAPI 框架在高性能接口与微服务开发中的应用,讲解异步请求处理、依赖注入机制、路由设计、数据库异步操作以及接口性能优化策略。结合实际项目案例,帮助开发者构建高并发、低延迟的现代化后端服务架构。

2026.06.16

94

12

while的用法
while的用法

while的用法是“while 条件: 代码块”,条件是一个表达式,当条件为真时,执行代码块,然后再次判断条件是否为真,如果为真则继续执行代码块,直到条件为假为止。本专题为大家提供while相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.25

248

5

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

2023.08.10

2094

6

墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

10

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

8

20

墨刀AI进阶技巧
墨刀AI进阶技巧

本合集由PHP中文网精心整理,为您提供墨刀AI核心进阶策略指南。内容涵盖高效提示词写作、原型智能生成与微调、结构化导图制作及行业分析报告输出等实战技巧。助您轻松掌握AI设计工具,大幅提升产品设计与团队协作效率。

2026.08.04

10

14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
uni-app从入门到实战教程
uni-app从入门到实战教程

共0课时 | 0人学习

uni-app x harmony开发指南
uni-app x harmony开发指南

共0课时 | 0人学习

uni-app鸿蒙运行和发行
uni-app鸿蒙运行和发行

共0课时 | 0人学习