从一个网络框架迁移到另一个网络框架可能是一项艰巨的任务,但是随着Fastapi的兴起,Fastapi是一个现代化和高性能的框架,用于使用Python构建API,这一过程变得更加顺畅,更有意义。 FastApi不仅提供了强大的功能,而且还提供异步编程,从而显着提高了Web应用程序的性能。在本指南中,我们将探讨从Django到FastApi的移植代码的过程,利用FastApi的功能和性能优势。
利用异步功能
Fastapi的核心强度在于其异步功能。通过利用异步编程的功能,您可以在Web应用程序中实现增强的性能和响应能力。这是将您的代码库迁移到Fastapi并充分利用其异步功能的方法。
方法
必须就哪些函数转换为异步并保持同步。通常,我们可以根据i/o-bound或cpu结合的功能对功能进行分类。在代码迁移过程中,我们将仅对I/O操作采用异步调用。这种方法是由以下事实驱动的。
-
i/o操作通常较慢,而CPU结合操作则较慢。
-
在同步编程中,I/O调用可以阻止执行,导致闲置CPU资源。
-
通过使I/O调用异步,该程序可以同时处理多个I/O操作,从而改善整体性能。
-
异步I/O允许程序在等待I/O响应时继续执行其他任务,最大化资源利用率。
1.创建异步客户和依赖注入
HTTPX异步HTTP请求
在FastApi中,传统的requests
库可以用httpx
替换为发出异步HTTP请求的httpx
。此更改允许您的应用程序同时执行多个请求,从而大大提高响应时间和效率。
异步Elasticsearch操作
FastApi提供了对AsyncElasticsearch
的支持,该支持使您可以与Elasticsearch异步进行交互。这种增强功能可以通过利用非阻滞I/O。
异步数据库与Sqlalchemy的相互作用
合并sqlalchemy
的async_sessionmaker
,以启用与SQL数据库的异步数据库交互。这种修改通过允许同时处理多个查询来提高数据库操作的效率。
用电动机优化MongoDB查询
集成motor
以执行异步MongoDB查询。通过拥抱非阻滞I/O,您的应用程序的数据库操作变得更加优化和响应。
异步重新与Aioredis呼叫
FastApi使用aioredis
库来促进对Redis的异步调用。这种变化提高了与REDIS相互作用的效率,从而提高了性能。
您可以写更多的客户来进行异步呼叫
2.重构同步I/O呼叫异步/等待
了解异步/等待
异步/等待是Python异步编程范式中的一个基本概念。当用async
关键字定义函数时,它将变成coroutine,可以在执行过程中暂停和恢复。 await
关键字用于异步函数中以暂停其执行,直到已期待的异步操作完成为止。这种非阻滞行为允许事件循环继续处理其他任务,提高代码的整体响应能力。
识别同步I/O通话
通过在Django代码库中识别同步I/O调用来开始迁移过程。这些可能包括缓存机制,数据库查询和外部API请求。
重写起异步的功能
要使代码库异步,请通过在def
关键字之前添加async
关键字来重构确定的函数。此修改表明这些功能是coroutines。
使用等待异步I/O
用异步对应物替换同步I/O调用。在这些呼叫之前,使用await
关键字,这确保了Coroutine等待异步操作在进行之前完成。
3.利用Asyncmixin的力量为等待的构造函数
需要等待的构造函数
在Python中,构造函数(通常定义为__init__
方法)是同步的,无法等待异步任务。但是,在某些情况下,在对象初始化过程中需要异步操作。这是AsyncMixin
课程发挥作用的地方。
引入异步
AsyncMixin
类提供了对同步构造函数限制的解决方案。它引入了一个名为__ainit__
的异步构造函数,使您可以在对象创建过程中执行异步操作。此外,混合蛋白覆盖了__await__
方法,在对象实例化过程中可以适当等待行为。您可以复制this链接的asyncmixin类代码并为您的类继承。
这是使用AsyncMixin
的简化示例:
class AsyncExample(AsyncMixin):
async def __ainit__(self, param1, param2):
# Perform asynchronous operations here
await self.async_operation1(param1)
await self.async_operation2(param2)
# ... (other methods here) ...
# Asynchronously create an instance of AsyncExample
async def main():
obj = await AsyncExample("Parameter 1", "Parameter 2")
4.用Uvicorn编写ASGI入口点
您成功将Python Web框架转换为FastApi并接受了其异步功能后,就该部署应用程序了。 FastApi与ASGI(异步服务器网关接口)兼容,该接口是异步Web服务器与您的应用程序通信的界面。流行的ASGI服务器之一是Uvicorn。让我们探索如何编写asgi.py
文件以使用uvicorn启动您的fastapi应用程序。
设置ASGI入口点
- 安装Uvicorn :如果您还没有,请使用首选的软件包管理器(例如PIP:)安装Uvicorn:
pip install uvicorn
-
创建
asgi.py
文件:在fastapi项目的根目录中,创建一个名为asgi.py
的文件。该文件将作为ASGI服务器的切入点。 -
导入Fastapi App :从应用程序的主模块中导入FastApi应用程序。这是您定义FastApi App实例的模块。
from your_app_module import app # Replace with the actual import path
- 创建Uvicorn应用程序实例:创建一个Uvicorn应用程序的实例,指定导入的FastApi应用程序和任何其他设置:
import uvicorn
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)
在此示例中,指示Uvicorn在所有可用网络接口(0.0.0.0
)上运行FastApi应用程序,并在port 8000
上收听。
运行ASGI服务器
使用asgi.py
文件,您可以使用Uvicorn启动FastApi应用程序。打开一个终端窗口并导航到包含asgi.py
文件的目录。然后,运行以下命令:
uvicorn asgi:app
-
asgi:app
指定模块的名称(asgi
)和FastApi App实例(app
)运行。
运行命令后,Uvicorn将启动ASGI服务器,您的FastAPI应用程序将在指定的主机和端口中访问。
。那是博客的人,别忘了发表评论或建议ð