Лучший способ использовать простые асинхронные очереди в django?

#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 чтобы решить эту проблему. Если я столкнусь с проблемами или не буду удовлетворен результатом, я буду использовать это решение.