Планировщики замедляют работу вашего веб-приложения?

Я создаю ювелирный магазин электронной коммерции, и функция, которую я создаю, включает в себя включение текущих рыночных цен на золото в конечную цену продукта. Я намерен обновлять цену на золото каждые 3 дня, выполняя вызовы API с помощью планировщика, поэтому весь процесс автоматизирован и требует минимального взаимодействия с системой.

Меня беспокоит следующее: будет ли планировщик с одной задачей, выполняемой каждые 72 часа, замедлять мой сервер (с использованием модели клиент-сервер) и влиять на его производительность?

Приложение на стороне сервера построено с использованием Django, Django REST framework и PostgresSQL.

Я имею в виду планировщик Advanced Python Scheduler.

1 ответ

Решение

Насколько я могу видеть из документации "Advanced Python Scheduler", они не предоставляют другого процесса для выполнения запланированных задач. Это остается вам выяснить.

Из своих документов они рекомендуют "BackgroundScheduler", который работает в отдельном потоке.

Теперь может возникнуть несколько проблем:

  1. Если вы запускаете несколько экземпляров Django (используя gunicorn или uwsgi), планировщик APS будет работать в каждом из этих процессов. Это нетривиальная проблема, которую нужно решить, если APS не учел ее (вам нужно будет проверить документацию).
  2. BackgroundScheduler будет работать в потоке, но Python ограничен GIL. Поэтому, если ваши фоновые задачи интенсивно загружают процессор, ваш процесс Django будет медленнее обрабатывать входящие запросы.
  3. Независимо от потока или нет, если ваше фоновое задание интенсивно использует ЦП + длится долгое время, это может повлиять на производительность вашего сервера.

APS кажется гораздо более низкоуровневой библиотекой, и я бы рекомендовал использовать что-нибудь попроще:

  1. Просто используйте системные cronjobs для запуска каждые 3 дня. Создайте команду управления django и используйте cron для ее выполнения.
  2. Используйте поддерживаемые django библиотеки, такие как celery, rq/rq-scheduler/django-rq или django-background-tasks.

Я думаю, что было бы разумно взглянуть на https://github.com/arteria/django-background-tasks, поскольку это самый простой из всех, требующий наименьшего количества настроек. Как только вы немного познакомитесь с этим, вы сможете взвесить все за и против того, что подходит для вашего варианта использования.

Еще раз, производительность вашего сервера зависит от того, что делает ваша фоновая задача и как долго она длится.

Другие вопросы по тегам