У меня есть куча запросов Django, которые выполняют некоторые математические вычисления (написанные на C и выполняемые через модуль Cython), которые могут выполнять неопределенное количество времени (порядка 1 секунды). Также запросам не требуется доступ к базе данных, и все они независимы друг от друга и от Django.
Прямо сейчас все синхронно (используя Gunicorn с sync
рабочими типами), но я хотел бы сделать это асинхронным и неблокирующим. Короче говоря, я хотел бы сделать что-то:
- Получите AJAX-запрос
- Выделить задачу доступному работнику (без блокировки основного веб-приложения Django)
- Рабочий выполняет задачу в неизвестное количество времени
- Django возвращает результат вычисления (список строк) в виде JSON всякий раз, когда задача завершается.
Я очень новичок в асинхронном Django, поэтому мой вопрос в том, какой стек лучше всего подходит для этого.
Подходит ли для такого рода процессов очередь задач? Кто-нибудь порекомендует Tornado + Celery + RabbitMQ или, возможно, что-то еще?
Заранее спасибо!