当前位置: 首页 > news >正文

网站建设有哪些分类专业门头制作公司

网站建设有哪些分类,专业门头制作公司,安徽建设工程监督和信用平台,vue.js 做网站大家好#xff0c;FastAPI已成为构建Python API的最流行框架之一#xff0c;因其速度和易用性而广受欢迎。但在构建高性能应用程序时#xff0c;使用同步#xff08;sync#xff09;还是异步#xff08;async#xff09;代码执行是很重要的问题。本文将通过现实世界的性…大家好FastAPI已成为构建Python API的最流行框架之一因其速度和易用性而广受欢迎。但在构建高性能应用程序时使用同步sync还是异步async代码执行是很重要的问题。本文将通过现实世界的性能测试对同步和异步的FastAPI实现进行基准测试并深入分析相关数据以帮助大家决定何时使用这两种方法。 1.同步与异步在FastAPI中的区别 同步代码sync在同步执行中任务一个接一个地处理。每个请求都需要等待前一个请求完成这在用户数量较多或存在慢I/O操作如数据库查询或文件上传时可能会导致瓶颈。 异步代码async异步执行支持多个请求并发处理。应用程序无需等待I/O操作如数据库调用完成而是可以继续处理其他请求从而在高并发环境中更有效率。 2.设置在FastAPI中基准测试同步与异步 为了比较同步和异步实现在这里创建了两个版本的FastAPI应用程序。 同步版本使用传统的阻塞数据库查询采用psycopg2。 异步版本使用非阻塞的异步查询采用asyncpg。 这两个版本都执行一个简单的任务从PostgreSQL数据库查询用户。数据库中包含极少的数据以便隔离同步/异步机制的影响。 技术栈 使用FastAPI作为API框架。 使用SQLAlchemy作为ORM。 使用psycopg2或psycopg2-binary同步和asyncpg异步进行数据库连接。 使用PostgreSQL作为数据库。 为了测试性能使用**Apache Benchmark(ab)**模拟了1000个请求具有100个并发连接。 2.1 同步版本代码 在同步版本中在这里使用psycopg2驱动与SQLAlchemy后者可执行阻塞查询。表格是使用同步的SQLAlchemy引擎创建的。 同步main.py from fastapi import FastAPI, Depends, HTTPException from sqlalchemy.orm import Session from .database import get_db, Userapp  FastAPI()app.get(/users/{user_id}) def get_user(user_id: int, db: Session  Depends(get_db)):# 同步和阻塞user  db.query(User).filter(User.c.id  user_id).first()if not user:raise HTTPException(status_code404, detailUser not found)return {id: user.id, name: user.name, email: user.email}同步database.py from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String from sqlalchemy.orm import sessionmakerDATABASE_URL  postgresql://user:passwordlocalhost/db_name# 创建同步的SQLAlchemy引擎 engine  create_engine(DATABASE_URL, echoTrue)# 创建用于同步查询的会话生成器 SessionLocal  sessionmaker(bindengine, autoflushFalse, autocommitFalse)# 定义元数据 metadata  MetaData()# 定义User表 User  Table(users, metadata,Column(id, Integer, primary_keyTrue),Column(name, String),Column(email, String), )# 在数据库中创建表 metadata.create_all(engine)# 获取同步数据库会话的依赖 def get_db():db  SessionLocal()try:yield dbfinally:db.close()2.2 异步版本代码 在异步版本中在这里使用asyncpg驱动与SQLAlchemy进行非阻塞查询。然而表的创建仍然是同步进行的因为SQLAlchemy的metadata.create_all()不支持异步。 异步main.py from contextlib import asynccontextmanager from fastapi import FastAPI, Depends, HTTPException from sqlalchemy.ext.asyncio import AsyncSession from sqlalchemy import select from .database import get_async_db, User, initialize_databaseasynccontextmanager async def lifespan(app: FastAPI):# 启动初始化数据库await initialize_database()yieldapp  FastAPI(lifespanlifespan)app.get(/users/{user_id}) async def get_user(user_id: int, db: AsyncSession  Depends(get_async_db)):result  await db.execute(select(User).where(User.c.id  user_id))user  result.fetchone()if not user:raise HTTPException(status_code404, detailUser not found)return {id: user.id, name: user.name, email: user.email}异步database.py from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine from sqlalchemy.orm import sessionmaker from sqlalchemy import MetaData, Table, Column, Integer, StringDATABASE_URL  postgresqlasyncpg://user:passwordlocalhost/db_name# 用于异步查询的异步引擎 engine  create_async_engine(DATABASE_URL,echoTrue,pool_size10,max_overflow20, )# 用于异步查询的异步会话 AsyncSessionLocal  sessionmaker(bindengine, class_AsyncSession, expire_on_commitFalse )# 定义元数据 metadata  MetaData()# 定义User表 users  Table(users,metadata,Column(id, Integer, primary_keyTrue),Column(name, String),Column(email, String), )# 创建所有表 async def init_db():async with engine.begin() as conn:await conn.run_sync(metadata.create_all)# 获取异步数据库会话的依赖 async def get_async_db():async with AsyncSessionLocal() as session:yield session# 启动初始化数据库 async def initialize_database():await init_db()在这个版本中请求是以异步方式处理的支持多个请求在等待I/O时并发处理。 3.基准测试命令 同步版本ab -n 1000 -c 100 http://127.0.0.1:8000/users/1 异步版本ab -n 1000 -c 100 http://127.0.0.1:8001/users/1 以下是基准测试的性能指标分析 同步vs异步Airtable的基准测试结果如下。 每秒请求数异步版本每秒可处理50.68个请求而同步版本每秒只能处理36.89个请求。在相同时间内异步处理的请求数比同步版本多37%因此在并发性方面异步显然胜出。 每个请求的响应时间平均值异步版本的平均响应时间低于同步版本27%1973毫秒vs2710毫秒这表明在高负载情况下异步处理请求的效率更高。 最长请求时间两个版本的最长请求时间相似约4000毫秒但异步版本的表现更稳定这体现在响应时间的波动较小。 以上是同步和异步版本在不同百分位数下的比较图包括平均和最长请求时间。 实线表示不同百分位数下的响应时间。 虚线表示同步2710.648毫秒和异步1973.057毫秒的平均响应时间。 点线突出显示同步4167毫秒和异步3851毫秒的最长请求时间。 4.FastAPI中同步与异步的选择 使用异步的情况 应用程序需要处理高流量和大量并发用户。 应用程序是与I/O绑定的需要进行大量数据库查询或API调用。 需要为大量请求最小化响应时间。 使用同步的情况 应用程序的并发量较小或主要执行CPU密集型任务。 希望保持代码库的简单性避免异步处理的复杂性。 不希望应用程序扩展到同时处理数百或数千个请求。 5.优化异步性能 虽然异步在这些测试中速度更快但仍有一些方法可以进一步优化。 连接池使用连接池重用数据库连接避免为每个请求创建一个新连接。 使用异步库确保所有I/O绑定的任务例如文件读/写、外部API调用都以异步方式处理以获得最佳性能。 测试更高的并发性进行更高并发量的负载测试例如500用户以充分发挥异步的优势。 engine  create_async_engine(DATABASE_URL,pool_size10,max_overflow20 )如果应用程序需要处理大量并发用户并严重依赖于I/O绑定任务那么异步FastAPI可以提供更好的性能、可扩展性和响应能力。不过对于更简单的用例可以选择同步实现。
http://www.pierceye.com/news/171379/

相关文章:

  • 网站怎么做uc整合查企业网站
  • 网站没被收录什么原因网站排名点击工具
  • 江西南昌建设厅网站商品展示软件
  • 眼镜企业网站建设方案2015做那些网站致富
  • 创建个人网站的流程建设网站聊天室
  • cms 学校网站上海模板网站
  • 网站建设投资风险分析公司做的网站费用如何做账
  • 网站建设费用核算科目DW做的网页用网站打不开
  • wordpress标签搜索引擎嘉兴市做网站优化
  • 网站更换关键词怎么做好wordpress post fonts
  • 厦门优化网站排名网站备案转服务器
  • 怎样做pdf电子书下载网站做旅行攻略的网站
  • 怎样做网站推广啊抖音网站的flash怎么做
  • 网站建设小说网站建设目标是什么意思
  • 如何做一个好的网站中英文网站好处
  • wordpress站点版权设置晋中建设集团网站
  • 怎么夸一个网站做的好看烟台百度网站推广
  • 佛山市网站建设分站多少钱企业门户账号是什么
  • 大中型网站开发价格铜山区建设局局网站周保春
  • 为什么有人做商城优惠券网站卖科技风格设计网站
  • 企业网站的需求分析是做网站编辑还是做平面设计
  • 超酷 flash 网站淮南网红餐厅
  • 湛江网站建设开发株洲关键词seo优化服务商
  • 女的有没有做网站的十大经典随身空间小说推荐
  • 江西做网站哪家好监理证查询网
  • 北京驾校网站建设网络哪里能接活做网站
  • 建设网站公司排名西宁网站建设优化案例
  • 外贸网站推广有用吗网络服务投诉平台
  • 网站制作价上传下载网站模板
  • 注册网站会员 我们的信息淘宝上可以做网站吗