您好,登錄后才能下訂單哦!
這篇文章主要介紹“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 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,)
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異步的并發源碼對比分析”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。