Django-Simple-Task выполняет фоновые задачи в Django 3, не требуя других услуг и рабочих процессов. Он запускает их в том же цикле событий, что и ваше приложение ASGI. Он не устойчив в качестве правильного бегуна задачи, такого как сельдерей, но работает для некоторых простых задач и имеет менее общие накладные расходы.
Вы можете выполнять подобные фоновые задачи в представлении Django, и это просто сработало.
from django_simple_task import defer def task1(): time.sleep(1) print("task1 done") async def task2(): await asyncio.sleep(1) print("task2 done") def view(requests): defer(task1) defer(task2) return HttpResponse(b"My View")
Вот обзор того, как это работает:
- При запуске приложения создается очередь, и многие работники начинают слушать очередь
- При вызове отложения в очередь добавляется задача (функция или функция косята)
- Когда работник получает задачу, он запускает его или делегирует его в тему
- При выключении приложения он ждет, пока задачи закончат перед выходом на сервер ASGI
Посмотреть на GitHub
Прочитайте документы
Оригинал: “https://dev.to/ericls/django-simple-task-a-django-3-task-runner-that-does-not-require-other-services-and-separate-worker-processes-5akj”