这篇文章主要介绍“fastapi与Django异步的并发源码对比分析”,在日常操作中,相信很多人在fastapi与djanGo异步的并发源码对比分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”fastapi
这篇文章主要介绍“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# -*- encoding: utf-8 -*-"""@File : test2.py@Time : 2020/3/13 14:21@Author : chise@Email : chise123@live.com@Software: PyCharm@info :"""from typing import Listimport databasesimport sqlalchemyfrom fastapi import FastAPIfrom pydantic import BaseModel# SQLAlchemy specific code, as with any other appDATABASE_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,)
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_namedef 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异步的并发源码对比分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!
--结束END--
本文标题: fastapi与django异步的并发源码对比分析
本文链接: https://lsjlt.com/news/351649.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
2024-05-24
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0