Выполнить код после ответа, используя Django Asyn c Views - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь выполнить длительную функцию (например, sleep (30)) после того, как представление Django вернет ответ. Я пробовал реализовать решения, предложенные для подобных вопросов:

Однако загрузка страницы клиента завершается только после завершения длительной функции при использовании сервера WSGI, такого как gunicorn.

Теперь, когда Django поддерживает асинхронные представления , возможно ли асинхронно выполнять длительный запрос?

1 Ответ

0 голосов
/ 08 августа 2020

Очевидно, я ищу решение той же проблемы, чтобы открыть представление, которое должно запускать фоновую задачу и отправлять ответ клиенту, не дожидаясь завершения запущенной задачи. Насколько я понимаю, это не одна из целей asyn c view в Django. Проблема в том, что весь исполняемый код связан с тем, что рабочий начал обрабатывать http-запрос. Если ответ отправляется обратно клиенту, рабочий не может обрабатывать какой-либо другой код / ​​задачу, больше запущенную в асинхронном представлении. Таким образом, все функции asyn c требуют перед. Следовательно, представление будет отправлять свой ответ клиенту только в том случае, если ожидаемая функция завершена.

Как я понимаю, все фоновые задачи должны быть помещены в очередь задач, где другой работник может поймать каждую новую задачу. Для этого есть несколько решений, например Djangp Channels или Django Q. Однако я не уверен, какое решение является наиболее легким.

...