#python #django #asynchronous #queue #celery
#python #django #асинхронный #очередь #сельдерей
Вопрос:
Мне нужна моя функция просмотра django для запуска задачи, которая затем будет выполняться в фоновом режиме, не блокируя ответ.
def my_task(client_information, unique_id): # task
#do something that takes a while
def my_view(request): # django view
client_information = request.GET.get('whatever') # get some information passed from the client
unique_id = generate_unique_id() # generate a unique ID for this task
start_task(client_information, unique_id) # the interesting part: start the task with client information and unique id, but non blocking
return JsonResponse({'id': unique_id})
Я читал о сельдерее, но код, который я видел, выглядел излишним, поскольку мне не нужна дальнейшая связь между процессами, и я действительно хочу максимально легкое решение.
Ответ №1:
Фоновые задачи Django — это простая очередь на основе базы данных, для которой требуется только рабочий, работающий в фоновом режиме (он вызывается через manage.py process_tasks
). Если вы никогда не воспользуетесь преимуществами Celery, я думаю, что это легкое решение, которое вы ищете.
После установки расширения вы можете определить метод и добавить @background(schedule=20)
к ним декоратор, который заставит их автоматически запускаться в фоновом режиме. Более подробную информацию см. В документации upstream.
Комментарии:
1. Спасибо! Я принял этот ответ, поскольку считаю, что он предлагает правильное решение моей проблемы. На данный момент я пытаюсь использовать это peter-hoffmann.com/2012/python-simple-queue-redis-queue.html чтобы решить эту проблему. Если я столкнусь с проблемами или не буду удовлетворен результатом, я буду использовать это решение.