Как запустить долго выполняющуюся задачу за сценой в django class based view?
Я хочу запустить долго выполняющуюся задачу в Django на основе класса Redirectview. Перед завершением этой задачи я хочу вернуть шаблон. Вот мой код.
Я пробую с этим кодом.
class Redirect_to_page(RedirectView):
async def sleep_long(self):
for i in range(1,10):
print(f'Run {i}')
await asyncio.sleep(1)
pass
query_string = True
pattern_name = 'pages:redirect_page'
def get_redirect_url(self, *args, **kwargs):
asyncio.run(self.sleep_long())
print('This run before complete!')
return super().get_redirect_url(*args, **kwargs)
и это результат.
Run 1
Run 2
Run 3
Run 4
Run 5
Run 6
Run 7
Run 8
Run 9
This run before complete!
Но я хочу получить результат типа_
Run 1
This run before complete!
Run 2
Run 3
Run 4
Run 5
Run 6
Run 7
Run 8
Run 9
Из вашего вопроса неясно, чего именно вы пытаетесь достичь. В целом, асинхронные задачи могут быть запущены путем интеграции сторонних рабочих. Celery является одним из них, который довольно популярен и имеет простые интеграции с django.
документы здесь: https://docs.celeryq.dev/en/stable/django/first-steps-with-django.html. простая запись в блоге здесь: https://realpython.com/asynchronous-tasks-with-django-and-celery/
У меня был большой опыт использования сельдерея, и я очень рекомендую.
Вы можете создать задачу, отвечающую за обработку вашей бизнес-логики, и диспетчеризировать эту задачу в вашем представлении.