将任何Python Web框架转换为Fastapi:综合指南
#python #django #fastapi #flask

Image description

从一个网络框架迁移到另一个网络框架可能是一项艰巨的任务,但是随着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的相互作用

合并sqlalchemyasync_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入口点

  1. 安装Uvicorn :如果您还没有,请使用首选的软件包管理器(例如PIP:)安装Uvicorn:
   pip install uvicorn
  1. 创建asgi.py文件:在fastapi项目的根目录中,创建一个名为asgi.py的文件。该文件将作为ASGI服务器的切入点。

  2. 导入Fastapi App :从应用程序的主模块中导入FastApi应用程序。这是您定义FastApi App实例的模块。

   from your_app_module import app  # Replace with the actual import path
  1. 创建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应用程序将在指定的主机和端口中访问。

那是博客的人,别忘了发表评论或建议ð