В приложении Django иногда вам необходимо выполнить некоторые более медленные или трудоемкие задачи, например отправку электронных писем или обработку больших файлов. Эти задачи блокируют основной поток, что приводит к медленному реагированию приложения, и тогда требуется поддержка асинхронных задач.
DjangoДля поддержки предусмотрены два метода Асинхронные задачи:Asyncio
иCelery
。Asyncio
даPython Стандартная библиотека для версий 3.4 и выше,Для написания асинхронного кода。иCelery
да一个独立的Асинхронные очередь задач,Может быть легко интегрирован с Django.
в этой статье,Мы покажем вам, как использоватьAsyncio
выполнить Асинхронные задача. первый,Нам необходимо убедиться, что версия приложения Django больше или равна 3.0.,因为这да Асинхронные задачи Поддерживаемые версии。в то же время,Нам также необходимо установитьuvicorn
иhttptools
Библиотека,Эти две библиотеки используются для асинхронных веб-серверов и анализа протокола HTTP соответственно. Его можно установить с помощью следующей команды:
pip install uvicorn httptools
После завершения установки,нам нужно быть внутриDjangoСоздайте в приложении функцию асинхронного просмотра.。Можно использовать асинхронные функции просмотра.async def
определение,и использоватьawait
ключевое слово ждать Асинхронные задачизавершение。以下да一个使用Asyncio
Пример функции асинхронного просмотра:
import asyncio
from django.http import HttpResponse
async def my_view(request):
# Асинхронные задачи
await asyncio.sleep(1)
# Обратный ответ
return HttpResponse('Hello, world!')
В приведенном выше коде,我们определение了一个名为my_view
асинхронная функция просмотра。Эта функция используетasync def
关键字определение,и использоватьawait
ключевое слово подожди одного Асинхронные задачизавершение。В этом случае,мы используемasyncio.sleep
функция для моделирования трудоемкой задачи,Он будет ждать 1 секунду. Полные Асинхронные задачиназад,Функция возвращает объект ответа HTTP.
пожалуйста, обрати внимание,В отличие от функций синхронизированного просмотра,异步视图函数返回的да一个сопрограмма
объект,а не объект ответа HTTP. Чтобы Django правильно обрабатывал эту функцию асинхронного просмотра,нам нужно использоватьas_asgi
Декоратор преобразует его вASGIприложение:
from django.http import HttpResponse
from django.views.decorators import asy_view
@as_asgi
async def my_view(request):
# Асинхронные задачи
await asyncio.sleep(1)
# Обратный ответ
return HttpResponse('Hello, world!')
В приведенном выше коде,мы используем了asy_view
Декоратор для создания функции асинхронного просмотра。Этот декоратор преобразует функции синхронного представления в функции асинхронного представления.,и преобразовать его в приложение ASGI. Сейчас,Мы создали использованиеAsyncio
асинхронная функция просмотра,Следующий шаг — как использовать его в приложении Django.