Django с python ayncio для выполнения фоновой задачи

#python #django #python-asyncio

#python #django #python-asyncio

Вопрос:

У меня есть два сервера, основной сервер, которые предоставляют REST API для приема данных от пользователя и ведения списка сведений о продукте. Этот сервер также отвечает за предоставление общего доступа к списку продуктов (подмножеству данных продукта) с дополнительным сервером, как только продукт обновляется / создается. также обратите внимание, что дополнительный URL зависит от сведений о продукте, а не от сервера исправлений.

Основной сервер написан на Django. Я использовал django model db signal в качестве события обновления продукта, создания и удаления. Теперь проблема в том, что я не хочу блокировать вызов REST моего основного сервера, пока он не передаст данные на дополнительный сервер. Для этого мне нужен какой-нибудь планировщик, т. Е. Создать задачу для заполнения данных в фоновом режиме, не блокируя мой текущий поток.

Я обнаружил, что модуль python asyncio поставляется с функцией ‘run_in_executor’, и она работает до сих пор, но я не знаю о побочном эффекте при запуске django на сервере wsgi, кто-нибудь может объяснить? или любой другой вариант?

Я нашел канал django, но для этого нужны дополнительные материалы, такие как отдельный запуск рабочего потока, кэш redis.

Комментарии:

1. Не запускайте фоновые задачи в приложении WSGI, таком как Django. Используйте очередь задач, подобную Celery.

2. мое приложение развертывается в Azure как webapp и не может запустить более одного процесса. и старайтесь избегать повторного использования кэша

3. Представьте, что вы инструктор по вождению, и ваш ученик говорит: «Я стараюсь избегать использования рулевого колеса». . Что бы вы ответили?

4. Это хорошо, но я прошу о случае, когда я за рулем автомобиля и прошу функции автоматического привода, чтобы я мог доесть свою еду

Ответ №1:

Вы должны использовать Django Celery для выполнения задач асинхронно или в фоновом режиме.

Celery — это очередь задач с включенными батарейками. Он прост в использовании, так что вы можете начать работу, не изучая всю сложность проблемы, которую он решает.

Вы можете получить более подробную информацию о сельдерее изhttp://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#first-steps

Комментарии:

1. мое приложение развертывается в Azure как webapp и не может запустить более одного процесса. и старайтесь избегать повторного использования кэша

2. Вы можете использовать отдельный кэш redis, который предоставляет Azure, а именно Azure Cache . Получите более подробную информацию от azure.microsoft.com/en-in/services/cache

3. Я могу, но побочные эффекты в зависимости от стоимости и развертывания. Любая альтернативная идея, например, открыть отдельный поток в django app ready(). И запустите цикл событий внутри этого потока. Но опять же, я не имею ни малейшего представления о побочных эффектах. Хотя это тоже работает.