fastapi与django异步的并发源码对比分析

发布时间:2023-03-15 09:51:09 作者:iii
来源:亿速云 阅读:180

这篇文章主要介绍“fastapi与django异步的并发源码对比分析”,在日常操作中,相信很多人在fastapi与django异步的并发源码对比分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”fastapi与django异步的并发源码对比分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

概述

据说fastapi是目前最快的异步框架,遂决定将其和django异步进行并发比较。

先说结果

fastapi的异步可以使整体运行速度非常均衡,不会出现较大波动,但是django会出现大量的波动问题,部分访问速度很快,但是部分访问速度很慢,甚至超时。

个人感觉是因为django的数据库访问是同步的,但是fastapi我是用的异步数据库访问。(django不支持异步数据库访问)

在长时间并发情况下,fastapi的运行状态非常稳定,但是django的运行速度不行(另外我发现runserver运行虽然慢,但是至少测试能成功,daphne并发量大了测试直接失败。。)。(之后还会考虑pypy的测试和其他情况的)

测试环境

阿里云

服务器: 2 vCPU 4 GiB (I/O优化) ecs.c5.large 4Mbps

数据库:rds.mysql.s1.small

服务器和数据库都在华北三

测试指令:

ab -n 10000 -c 1000 http://127.0.0.1:8002/get_update_info

在更大并发和更长时间的情况下daphne测试报错,就算设置-k也报错,但是fastapi能够很稳定的响应。

测试结果

fastapi与django异步的并发源码对比分析

fastapi与django异步的并发源码对比分析

示例代码

#fastapi
# -*- encoding: utf-8 -*-
"""
@File    : test2.py
@Time    : 2020/3/13 14:21
@Author  : chise
@Email   : chise123@live.com
@Software: PyCharm
@info    :
"""
from typing import List

import databases
import sqlalchemy
from fastapi import FastAPI
from pydantic import BaseModel

# SQLAlchemy specific code, as with any other app
DATABASE_URL = "mysql+pymysql://......"
# DATABASE_URL = "postgresql://user:password@postgresserver/db"

database = databases.Database(DATABASE_URL)

metadata = sqlalchemy.MetaData()

notes = sqlalchemy.Table(
    "notes",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column("text", sqlalchemy.String),
    sqlalchemy.Column("completed", sqlalchemy.Boolean),
)

engine = sqlalchemy.create_engine(
    DATABASE_URL, connect_args={"check_same_thread": False}
)

app = FastAPI()


@app.on_event("startup")
async def startup():
    await database.connect()


@app.on_event("shutdown")
async def shutdown():
    await database.disconnect()


class D(BaseModel):
    id: int
    info: str
    data: str


@app.get('/get_update_info', response_model=D)
async def get_update_info():
    return await database.fetch_one("SELECT * FROM `publicadmin_updateinfo` LIMIT 1 ;")


if __name__ == "__main__":
    import uvicorn

    uvicorn.run(app,)

django代码如下

class UpdateInfo(models.Model):
    info = models.TextField(verbose_name="更新日志")
    data = models.TextField(verbose_name="主要内容")

    # data = MDTextField(verbose_name="主要内容")
    class Meta:
        verbose_name = "公告栏"
        verbose_name_plural = verbose_name
def get_update_info(request):
    """
    更新日志
    Args:
        request:
    Returns:
    """
    info: UpdateInfo = UpdateInfo.objects.first()
    return JsonResponse({"id": info.id, "msg": info.info, "main_info": info.data})

到此,关于“fastapi与django异步的并发源码对比分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

推荐阅读:
  1. Python使用Fastapi开发的步骤
  2. Python中FastAPI构建Web服务的实现方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

fastapi django

上一篇:C++中的动态规划子序列问题怎么解决

下一篇:VueJs中toRef与toRefs函数怎么使用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》