Планировщики замедляют работу вашего веб-приложения?
Я создаю ювелирный магазин электронной коммерции, и функция, которую я создаю, включает в себя включение текущих рыночных цен на золото в конечную цену продукта. Я намерен обновлять цену на золото каждые 3 дня, выполняя вызовы API с помощью планировщика, поэтому весь процесс автоматизирован и требует минимального взаимодействия с системой.
Меня беспокоит следующее: будет ли планировщик с одной задачей, выполняемой каждые 72 часа, замедлять мой сервер (с использованием модели клиент-сервер) и влиять на его производительность?
Приложение на стороне сервера построено с использованием Django, Django REST framework и PostgresSQL.
Я имею в виду планировщик Advanced Python Scheduler.
1 ответ
Насколько я могу видеть из документации "Advanced Python Scheduler", они не предоставляют другого процесса для выполнения запланированных задач. Это остается вам выяснить.
Из своих документов они рекомендуют "BackgroundScheduler", который работает в отдельном потоке.
Теперь может возникнуть несколько проблем:
- Если вы запускаете несколько экземпляров Django (используя gunicorn или uwsgi), планировщик APS будет работать в каждом из этих процессов. Это нетривиальная проблема, которую нужно решить, если APS не учел ее (вам нужно будет проверить документацию).
- BackgroundScheduler будет работать в потоке, но Python ограничен GIL. Поэтому, если ваши фоновые задачи интенсивно загружают процессор, ваш процесс Django будет медленнее обрабатывать входящие запросы.
- Независимо от потока или нет, если ваше фоновое задание интенсивно использует ЦП + длится долгое время, это может повлиять на производительность вашего сервера.
APS кажется гораздо более низкоуровневой библиотекой, и я бы рекомендовал использовать что-нибудь попроще:
- Просто используйте системные cronjobs для запуска каждые 3 дня. Создайте команду управления django и используйте cron для ее выполнения.
- Используйте поддерживаемые django библиотеки, такие как celery, rq/rq-scheduler/django-rq или django-background-tasks.
Я думаю, что было бы разумно взглянуть на https://github.com/arteria/django-background-tasks, поскольку это самый простой из всех, требующий наименьшего количества настроек. Как только вы немного познакомитесь с этим, вы сможете взвесить все за и против того, что подходит для вашего варианта использования.
Еще раз, производительность вашего сервера зависит от того, что делает ваша фоновая задача и как долго она длится.