fastapi-事件循环-线程池-阻塞

发布时间:2026/10/7 7:59:13
fastapi-事件循环-线程池-阻塞 概念含义在 Python 中的例子进程一个运行中的程序实例有自己的内存空间运行python main.py通常启动一个 Python 进程线程进程内部执行代码的单位同一进程的线程共享内存主线程、线程池里的工作线程协程可以暂停和恢复执行的任务由事件循环调度async def定义的函数所产生的协程线程池管理并复用多个工作线程接收任务并执行FastAPI 用它执行普通def路由协程不会自动创建线程。一个事件循环通常在一个线程里调度许多协程某个协程等待异步 I/O 时它可以切换去处理其他协程。Python 线程文档、协程文档FastAPI 根据函数类型选择调用方式FastAPI 调用的函数执行位置等待期间的情况async def路由或依赖事件循环所在的线程真正异步等待时可以处理其他任务普通def路由或依赖线程池里的工作线程工作线程可能阻塞事件循环仍可继续你直接调用的普通工具函数调用它的线程不会自动转交线程池调用测试main.py import asyncio import time from fastapi import FastAPI app FastAPI() app.get(/a) async def a(): await asyncio.sleep(3) return {route: a} app.get(/b) def b(): time.sleep(3) return {route: b} app.get(/c) async def c(): time.sleep(3) return {route: c}compare.py import time from concurrent.futures import ThreadPoolExecutor from urllib.request import urlopen def request(route): url fhttp://127.0.0.1:8000/{route} with urlopen(url, timeout30) as response: return response.read().decode() def compare(route): start time.perf_counter() with ThreadPoolExecutor(max_workers3) as pool: # 同时提交 3 个请求 futures [ pool.submit(request, route) for _ in range(3) ] # 等待所有请求完成 for future in futures: future.result() elapsed time.perf_counter() - start print(f/{route}3 个请求全部完成耗时 {elapsed:.2f} 秒) for route in [a, b, c]: compare(route)运行结果

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询