高并发场景下,python各web框架的优劣对比与示例分析

2023-05-16

高并发场景下,python各个web框架的优劣对比与示例分析

Python有许多适合高并发场景的Web框架,下面是其中几个:

  1. Flask

Flask是一个轻量级的Web框架,由Werkzeug和Jinja2模板引擎组成。Flask的设计简单,易于扩展,具有较高的灵活性和可定制性。它适用于开发小型Web应用程序和API,以及中小型的高并发Web应用程序。

  1. Django

Django是一个完整的Web框架,具有强大的功能和灵活的架构。它的设计重点是开发大型、高度可扩展的Web应用程序。Django支持ORM、自动化的管理界面、表单处理、缓存、安全性等功能,这些功能使得开发Web应用程序更加高效和简单。

  1. Tornado

Tornado是一个高性能的Web框架,具有轻量级的设计和异步非阻塞的I/O模型。它被广泛应用于实时Web应用程序、高并发的API、聊天应用程序等领域。Tornado适合处理高并发、大规模请求和响应的Web应用程序。

  1. FastAPI

FastAPI是一个基于Starlette框架和Pydantic库的高性能Web框架,它采用异步非阻塞的I/O模型和OpenAPI(以前称为Swagger)规范。FastAPI支持自动化的API文档、数据验证、异步请求和响应等功能。它适用于高性能的Web API和微服务。

总之,Python有许多适合高并发场景的Web框架,开发者可以根据自己的需求和实际情况选择适合自己的框架。

flask框架处理高并发场景 ==>不推荐

Flask是一个轻量级的Web框架,由于其设计的简单和易于扩展,因此在处理高并发场景方面可能需要进行一些额外的工作。下面是一些关于如何处理高并发和如何部署启动Flask应用程序的一些建议。

  1. 使用Gunicorn或uWSGI等WSGI服务器

在生产环境中,通常使用WSGI服务器作为Web服务器来部署Flask应用程序。WSGI服务器允许Flask应用程序与Web服务器之间进行快速、高效的通信。Gunicorn和uWSGI是两个常用的WSGI服务器,它们都可以与Flask一起使用,提高应用程序的性能和并发能力。

  1. 使用Nginx进行反向代理

在高流量场景下,使用Nginx进行反向代理可以有效提高Flask应用程序的性能和并发能力。通过将请求从Nginx转发到Flask应用程序,可以降低应用程序的负载,并使请求处理更快。

  1. 使用缓存

Flask提供了内置的缓存支持,可以使用缓存来减少对数据库和其他资源的访问。通过使用缓存,可以大大减少对数据库的访问次数,从而提高应用程序的响应速度和并发能力。

  1. 使用异步处理

Flask框架本身不支持异步处理,但可以使用像Flask-SocketIO这样的扩展来实现异步处理。异步处理可以提高应用程序的并发能力,特别是在处理大量实时请求时,效果更佳。

关于部署启动Flask应用程序,在生产环境中,通常使用WSGI服务器将Flask应用程序部署到服务器上。可以使用类似于Gunicorn或uWSGI这样的WSGI服务器,通过命令行将Flask应用程序部署到服务器上。在部署Flask应用程序时,还应该考虑安全性、监控和日志记录等方面,以确保应用程序的稳定和安全。

将Flask应用程序部署到Gunicorn服务器上:

  1. 安装Gunicorn

    pip install gunicorn
    
  2. 创建启动脚本

    在Flask应用程序的根目录下创建一个启动脚本,例如app.sh:

    gunicorn -w 4 -b 0.0.0.0:8000 app:app
    

    -w参数指定Gunicorn的工作进程数,可以根据需要进行修改。 -b参数指定绑定的IP地址和端口号。 app:app参数表示Flask应用程序的入口文件和应用程序对象。

  3. 启动应用程序

    运行以下命令启动应用程序:

    sh app.sh
    

​ 4. 示例app代码:

from flask import Flask, request

app = Flask(__name__)


@app.route('/showip', methods=['GET'])
def hello_world():
    if request.method == 'GET':
        return request.remote_addr

# if __name__ == '__main__':
#     app.run(host='0.0.0.0',port=5000,debug=True)

flask使用缓存

Flask提供了多种缓存机制,包括内存缓存、文件缓存、Redis缓存等。以下是一个使用内存缓存的示例:

from flask import Flask
from flask_caching import Cache

app = Flask(__name__)
cache = Cache(app, config={'CACHE_TYPE': 'simple'})

@app.route('/hello/<name>')
@cache.cached(timeout=60) # 缓存60秒
def hello(name):
    return f'Hello {name}!'

if __name__ == '__main__':
    app.run()

在上面的示例中,使用flask_caching扩展来实现缓存功能。首先,在Flask应用程序中实例化一个Cache对象,并将其与应用程序关联。config参数用于设置缓存的类型,这里使用的是内存缓存(simple)。然后,在路由函数上添加@cache.cached装饰器,表示对该函数的结果进行缓存,并设置缓存时间为60秒。如果在缓存时间内再次访问同样的路由,将直接返回缓存中的结果,而不是再次执行路由函数。

django处理高并发场景策略 ==>不推荐

Django 本身并不是一个异步的 Web 框架,但是可以通过使用异步任务队列、异步视图函数、缓存机制等方式来提高并发处理能力。

以下是一些在 Django 中处理高并发的方式:

  1. 使用异步任务队列:Django 支持使用异步任务队列来执行一些耗时的后台任务,例如发送邮件、处理大量数据等。常用的异步任务队列包括 Celery 和 RQ。
  2. 使用异步视图函数:Django 支持使用异步视图函数来处理异步请求,例如 AJAX 请求、WebSocket 连接等。在视图函数中使用异步 IO 操作,可以提高并发处理能力。
  3. 使用缓存机制:Django 支持使用多种缓存后端,例如 Memcached 和 Redis 等。使用缓存机制可以避免重复计算、减轻数据库负载、加速响应等。
  4. 使用分布式架构:Django 可以与其他分布式系统配合使用,例如使用消息队列来进行任务分发、使用负载均衡器来均衡流量等。
  5. 使用数据库读写分离:Django 支持在数据库层面上进行读写分离,例如使用 MySQL 的主从复制、PostgreSQL 的流复制等。
  6. 使用缓存页面:Django 支持使用缓存页面来避免重复渲染相同的页面,从而提高响应速度。可以使用 Django 自带的缓存框架或第三方缓存插件来实现。

Tornado如何处理高并发场景 ==>推荐

Tornado 是一个 Python 异步 Web 框架,天生适合处理高并发场景。以下是一些 Tornado 处理高并发的方式:

  1. 使用协程(coroutine):Tornado 支持使用协程来处理异步 IO 操作,可以避免使用传统的回调方式,简化代码逻辑,提高代码可读性和维护性。
  2. 使用异步 IO 操作:Tornado 支持使用异步 IO 操作来处理网络 IO,例如使用异步 HTTP 客户端、异步数据库驱动程序等。
  3. 使用异步任务队列:Tornado 支持使用异步任务队列,例如 Celery,来处理一些耗时的后台任务,从而释放主线程的资源,提高并发处理能力。
  4. 使用缓存机制:Tornado 支持使用多种缓存后端,例如 Memcached 和 Redis 等。使用缓存机制可以避免重复计算、减轻数据库负载、加速响应等。
  5. 使用反向代理:Tornado 可以与反向代理服务器(如 Nginx)一起使用,通过负载均衡、缓存、压缩等方式来优化性能。
  6. 使用异步 WebSocket:Tornado 支持使用异步 WebSocket 通信,可以处理大量实时通信请求,例如聊天室、在线游戏等。

需要注意的是,以上方式都需要根据具体场景进行评估和选择,不能一概而论。在处理高并发场景时,需要考虑多方面的因素,例如数据库性能、缓存策略、网络瓶颈等,综合权衡后选择合适的方案。

使用异步 IO 操作

# coding=utf-8

import tornado.ioloop
import tornado.web
import tornado.httpclient


class MainHandler(tornado.web.RequestHandler):
    async def get(self):
        url = "https://baidu.com/"
        # 异步请求url并把结果提交给response,传输给接口返回
        response = await tornado.httpclient.AsyncHTTPClient().fetch(url)
        self.write(response.body)


def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])


if __name__ == "__main__":
    app = make_app()
    app.listen(18888)
    # 添加debug=True参数,可以在控制台看到错误信息
    tornado.ioloop.IOLoop.current().start()

在这个示例中,我们定义了一个 MainHandler 类来处理 HTTP 请求,其中使用了异步关键字 async 来定义异步方法。在 get 方法中,我们使用了 Tornado 异步 HTTP 客户端 AsyncHTTPClient 来发送 HTTP 请求,并使用 await 关键字等待响应返回。

通过使用异步 IO 操作,我们可以避免使用传统的回调方式,简化代码逻辑,提高代码可读性和维护性。同时,异步 IO 操作也能够提高服务器的并发处理能力,提升系统的性能表现。

使用协程

# coding=utf-8


import tornado.ioloop
import tornado.web
import tornado.gen
import tornado.httpclient

class MainHandler(tornado.web.RequestHandler):
    @tornado.gen.coroutine
    def get(self):
        url = "https://www.google.com.hk/"
        response = yield tornado.httpclient.AsyncHTTPClient().fetch(url)
        self.write(response.body)

def make_app():
    return tornado.web.Application([
        (r"/", MainHandler),
    ])

if __name__ == "__main__":
    app = make_app()
    # 设置公网可以访问
    app.listen(18888, address="0.0.0.0")
    tornado.ioloop.IOLoop.current().start()


在这个示例中,我们使用 @tornado.gen.coroutine 装饰器来定义协程方法。在 get 方法中,我们使用 tornado.httpclient.AsyncHTTPClient().fetch 方法来发送 HTTP 请求,并使用 yield 关键字等待响应返回。

通过使用协程,我们可以避免使用传统的回调方式,简化代码逻辑,提高代码可读性和维护性。同时,协程也能够提高服务器的并发处理能力,提升系统的性能表现。

需要注意的是,如果协程中存在耗时操作(如 IO 操作),则需要使用 Tornado 的异步 IO 操作或异步任务队列来处理,避免阻塞主线程。

FastAPI高并发场景应用 ==>最新推荐

from fastapi import FastAPI
import uvicorn

app = FastAPI()

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

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=8000)

在这个示例中,我们使用 FastAPI 构建了一个简单的 Web 应用程序,并使用 Uvicorn 作为 Web 服务器运行。使用 async 关键字定义异步方法,使得应用程序能够异步地处理请求。

FastAPI 内置的异步支持和 Uvicorn 的高性能异步服务器可以让我们轻松地构建高性能、高并发的 Web 应用程序。

需要注意的是,在高并发场景下,除了使用异步 IO 操作和高性能服务器之外,还需要注意应用程序的并发连接数、数据库连接池大小、缓存的使用等问题,以避免出现瓶颈和性能问题。

使用数据库连接池

# coding=utf-8

from fastapi import FastAPI
from sqlalchemy import text
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from sqlalchemy.orm import sessionmaker
import uvicorn


app = FastAPI()

user = ""
host = ""
port = 3306
database = ""
# 创建数据库引擎

DATABASE_URL = f"mysql+aiomysql://{user}:{password}@{host}:{port}/{database}"
engine = create_async_engine(DATABASE_URL, echo=True, pool_size=10, max_overflow=20)

# 创建会话工厂
async_session_factory = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)


# 定义接口
@app.get("/")
async def read_root():
    async with async_session_factory() as session:
        # 测试连通性
        # result = await session.execute(text("SELECT 1"))
        # return {"result": result.scalar()}

        # 获取一条数据
        result = await session.execute(text("SELECT * FROM demo.runoob_tbl"))
        data = result.fetchone()
        print(data)
        # 将数据转换为字典
        # 提取出数据
        # (1, '学习 PHP', '菜鸟教程', datetime.date(2023, 2, 23))
        result = {"id": data[0], "title": data[1], "author": data[2], "submission_date": data[3]}
        return {"result": result}



if __name__ == "__main__":
    # fastApi_mysql_conn_pool
    uvicorn.run(app="fastApi_mysql_conn_pool:app", host="127.0.0.1", port=8000, reload=True)

在这个示例中,我们使用 SQLAlchemy 实现了 MySQL 数据库连接池的功能。首先,我们创建了一个异步引擎 engine,并指定了连接池大小和最大溢出数量。然后,我们创建了一个会话工厂 async_session_factory,用于创建异步会话。

在 API 接口中,我们使用 async with async_session_factory() as session 创建一个异步会话,并通过 session.execute 执行 SQL 查询语句。

使用 MySQL 数据库连接池可以有效地管理数据库连接,提高应用程序的性能和并发处理能力。同时,使用 SQLAlchemy 和异步会话可以使代码更加简洁和易于维护。

使用多进程提高并发处理能力

在运行 FastAPI 应用程序时,可以使用 uvicorn 或其他 WSGI 服务器来启动应用程序,并设置工作进程数或线程数来处理并发请求。在启动 uvicorn 时,可以使用 -w 参数来指定工作进程数,例如:

uvicorn main:app -w 4

这个命令会启动 4 个工作进程来处理并发请求。根据 CPU 核心数和服务器资源情况,可以适当调整工作进程数,以提高处理并发请求的能力。

缓存的使用场景

缓存是一种用于提高数据访问速度降低系统负载的技术。以下是一些常见的缓存使用场景:

  1. 频繁查询的结果:当某个查询结果被频繁请求时,可以将查询结果缓存起来,下次请求时直接从缓存中获取,避免重复查询和计算,从而提高系统响应速度和性能。
  2. 计算结果:当某个计算结果的计算成本较高时,可以将计算结果缓存起来,下次请求时直接从缓存中获取,避免重复计算和浪费资源。
  3. 静态资源:当应用程序中的某些静态资源(如图片、脚本、样式表等)被频繁请求时,可以将这些资源缓存到浏览器或CDN中,从而加速资源的加载和降低服务器负载。
  4. 第三方API调用:当应用程序需要调用第三方API时,可以将API的响应结果缓存起来,下次请求时直接从缓存中获取,避免重复调用和等待,从而提高系统响应速度和稳定性。
  5. 用户会话数据:当应用程序需要维护用户会话数据时,可以将用户会话数据缓存到内存或Redis中,避免重复查询数据库或文件系统,从而提高系统响应速度和性能。

需要注意的是,缓存并不是万能的解决方案,不适合所有场景。缓存的使用需要根据实际情况进行评估和调整,权衡缓存带来的性能提升和资源消耗,以及缓存的一致性和失效策略等因素。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

高并发场景下,python各web框架的优劣对比与示例分析 的相关文章

  • Python:在列表理解本身中引用列表理解?

    这个想法刚刚出现在我的脑海中 假设您出于某种原因想要通过 Python 中的列表理解来获取列表的唯一元素 i if i in created comprehension else 0 for i in 1 2 1 2 3 1 2 0 0 3
  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 在 python 程序中合并第三方库的最佳实践是什么?

    下午好 我正在为我的工作编写一个中小型Python程序 该任务需要我使用 Excel 库xlwt and xlrd 以及一个用于查询 Oracle 数据库的库 称为CX Oracle 我正在通过版本控制系统 即CVS 开发该项目 我想知道围
  • 如何测量我的网站客户端的图像下载时间?

    在 Img 标签中 我们知道图像有一个 OnLoad 事件 该事件在图像完成加载时触发 但是我们能在图像开始下载时得到准确的测量结果吗 我正在尝试测量网站的页面加载时间 因此如果可能的话 了解加载图像需要多长时间将成为我分析的一部分 我想以
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • 基于代理的模拟:性能问题:Python vs NetLogo & Repast

    我正在 Python 3 中复制一小段 Sugarscape 代理模拟模型 我发现我的代码的性能比 NetLogo 慢约 3 倍 这可能是我的代码的问题 还是Python的固有限制 显然 这只是代码的一个片段 但 Python 却花费了三分
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • Python pickle:腌制对象不等于源对象

    我认为这是预期的行为 但想检查一下 也许找出原因 因为我所做的研究结果是空白 我有一个函数可以提取数据 创建自定义类的新实例 然后将其附加到列表中 该类仅包含变量 然后 我使用协议 2 作为二进制文件将该列表腌制到文件中 稍后我重新运行脚本
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • 绘制方程

    我正在尝试创建一个函数 它将绘制我告诉它的任何公式 import numpy as np import matplotlib pyplot as plt def graph formula x range x np array x rang
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • 对年龄列进行分组/分类

    我有一个数据框说df有一个柱子 Ages gt gt gt df Age 0 22 1 38 2 26 3 35 4 35 5 1 6 54 我想对这个年龄段进行分组并创建一个像这样的新专栏 If age gt 0 age lt 2 the
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 如何使用 Pycharm 安装 tkinter? [复制]

    这个问题在这里已经有答案了 I used sudo apt get install python3 6 tk而且效果很好 如果我在终端中打开 python Tkinter 就可以工作 但我无法将其安装在我的 Pycharm 项目上 pip
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • HTTP安全-nonce和timestamp在Http安全协议中的作用

    http www byywee com page M0 S591 591082 html 写道 前段时间给客户网站做新浪微博账号登录功能 xff0c 对 OAuth协议以及相关的一些安全协议做了一些研究 xff0c 顺便就记录一下学习心得吧
  • NVIDIA TensorRT使用记录

    1 准备工作 1 Pipeline train 在Host PC的GPU上训练test deployment 在TX1 TX2上部署使用 2 主机部署步骤 Running JetPack on the Host JetPack L4T 3
  • 用C语言实现串口通讯程序

    1 首先安装虚拟串口vspd软件 xff0c 用于创建虚拟串口进行互联调试 2 打开vspd软件 xff0c 选择COM1和COM4 xff0c 点击Add pair xff0c 把COM1和COM4互联 3 打开虚拟串口助手 xff0c
  • A2M7雷达在虚拟机的SLAM建图

    准备 Ubuntu18 04 雷达A2M7 一 前期准备 安装 建立工作空间并编译 mkdir p turtlebot ws src cd turtlebot ws src git clone https github com ncnynl
  • linux cmake分别指定编译/运行时动态库链接路径

    1 背景 在树莓派上开发执行程序 xff0c 需要用到opencv curl jsoncpp等库函数支持 xff0c apt get安装好后 xff0c 编译执行正常 但是执行程序挪到别的板子上 xff0c 都要apt get安装这些库 x
  • C语言函数库之字符串连接函数(string.h)

    1 字符串连接函数strcat 函数定义 xff1a char strcat char str1 const char str2 函数功能 xff1a 把str2 包括 39 0 39 拷贝到str1的尾部 连接 xff0c 并返回str1
  • foc学习笔记3——电流环

    foc学习笔记3 电流环 电流环的作用 前文不断强调 xff0c 进行磁场定向控制需要控制的是电流而非电压 xff0c 只是因为我们没有办法直接去控制电流才暂时退而求其次地去控制电压 虽然电压控制的效果也还不错 xff0c 但由于电机不是单
  • ESP32之蓝牙配网blufi

    概览 BluFi 是一款基于蓝牙通道的 Wi Fi 网络配置功能 xff0c 适用于 ESP32 它通过安全协议将 Wi Fi 配置和证书传输到 ESP32 xff0c 然后 ESP32 可基于这些信息连接到 AP 或建立 SoftAP B
  • 机器人学习之项目- Project2 :Where Am I?

    1 项目概述 欢迎来到 Where Am I 我在哪里 定位项目 在这个项目中 xff0c 将学习如何利用ROS AMCL包在Gazebo模拟环境的地图中准确地定位移动机器人 在完成本项目的过程中 xff0c 涉及机器人软件工程的几个方面
  • 将不同类对象指针存放QVector中

    需求 xff1a 将一系列操作步骤放在链表中按需调用 我将每个操作步骤用一个类实现 xff0c 将各类继承于一个基类 xff0c 再将指向各子类的基类指针放在QVector Vector xff0c 即可通过C 43 43 的多态实现调用各
  • 体感摄像头 realsense 系列硬件资料

    一 体感摄像头 Intel的体感摄像机是具有深度图像采集能力的摄像机 xff0c 目前已经出到了400系列 与kinect 2 xff0c ZED xff0c leap motion比较 xff0c 属于比较中庸 手势识别方面不如leap
  • C语言进度条的实现

    C语言进度条的实现 buff N xff1a 进度条状态字符串 xff0c N大小决定进度条长度 xff08 自行调整 xff09 xff0c 使用前先将所有字符初始化置零 xff0c 我这里使用的是memset函数 xff1b label
  • numpy下的随机数

    版权声明 xff1a 本文为博主原创文章 xff0c 未经博主允许不得转载 https blog csdn net m0 38061927 article details 75335069 在使用Python进行数据处理时 xff0c 往往
  • 宏函数 可变参数 C/C++

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • 排查ingress 404报错的方法--附:在容器中使用tcpdump抓包

    出现这个问题 xff0c 一般是由于路由不通导致的 xff0c 需要进行抓包排查 首先要解决的问题是 xff0c 如何在 ingress controller 容器中安装抓包工具 1 由于 ingress controller 的mando
  • fastApi介绍与重要版本更新细节

    fastApi介绍 FastAPI 是用于使用 Python 构建 API 的现代 Web 框架 它建立在 Starlette 框架之上 xff0c Starlette 框架是一个轻量级且可扩展的 ASGI xff08 异步服务器网关接口
  • 3. fastApi查询参数详解

    当声明的参数不是路径参数时 xff0c 路径操作函数会把该参数自动解释为查询参数 如下 路径操作函数将参数skip limit解释为查询参数 query parameter span class token decorator annota
  • 4. fastApi请求体详解

    简单介绍网络请求 网络请求是指客户端 xff08 例如浏览器 移动应用程序等 xff09 向服务器发送请求 xff0c 以获取特定资源或执行特定操作的过程 HTTP请求是一种常见的网络请求协议 xff0c 它通过互联网连接客户端和服务器 x
  • python多线程与多进程简略介绍

    GIL介绍 在python中GIL的限制导致不论是在单核还是多核条件下 xff0c 同时刻都只能运行 一个线程 xff0c 这使得Python多线程无法发挥多核并行的优势 GIL全称为Global Interpreter Lock意思是全局
  • 高并发场景下,python各web框架的优劣对比与示例分析

    高并发场景下 xff0c python各个web框架的优劣对比与示例分析 Python有许多适合高并发场景的Web框架 xff0c 下面是其中几个 xff1a Flask Flask是一个轻量级的Web框架 xff0c 由Werkzeug和