Какой способ лучше всего подходит для запуска фоновых процессов? - PullRequest
1 голос
/ 30 марта 2020

На стороне сервера: мне нужен способ часто выполнять некоторые задачи в фоновом режиме и запускать его в определенное время c. Мой язык программирования Python для серверной части (Sani c Framework), VueJs для клиентской части, MongoDB в качестве основной БД и Redis для кэширования. Также я использую контейнер Docker (docker -compose). Кроме того, я раньше работал с Celery, но я хочу знать, какое решение для производства является наилучшим, которое гарантирует его стабильность и надежность.

На стороне клиента: для упомянутого вопроса мне нужно запустить его на на стороне сервера, иногда мне нужно запустить планировщик заданий на клиентах, встраиваемых устройствах, таких как Raspberry Pi, которые могут запускать Python или JavaScript.

Итак, каковы ваши решения для этих вариантов использования?

Ответы [ 3 ]

3 голосов
/ 01 апреля 2020

Я один из основных разработчиков для Сани c. Я согласен с другими ответами, что сельдерей - отличный вариант. Для тех, кто нуждается в более легком решении, у меня есть пост об альтернативном подходе только внутри Sani c: https://community.sanicframework.org/t/how-to-use-asyncio-queues-in-sanic/166/4

2 голосов
/ 30 марта 2020

На производстве у нас есть как долгосрочные, так и краткосрочные задачи, и в целом наш кластер Celery выполняет до 6 миллионов задач в день, поэтому, естественно, я бы порекомендовал Celery. Это сделано для этой цели, и если вы Python разработчик, у вас есть еще одна причина выбрать Celery. Наконец, Celery - единственная известная мне система очередей задач Python с планировщиком высокой доступности (https://github.com/mixkorshun/celery-beatx и https://github.com/sibson/redbeat).

Существует два другие (Python) проекты, которые следует упомянуть в качестве альтернативы Celery - Huey (https://github.com/coleifer/huey) и Apache Airflow (https://github.com/apache/airflow).

0 голосов
/ 30 марта 2020

Запуск нового процесса в фоновом режиме в python так же просто, как вызов os.fork(). Для подробного примера см. https://python-course.eu/forking.php

РЕДАКТИРОВАТЬ:

Для полнофункционального решения, я бы рекомендовал разветвить фоновый процесс как описанный выше, а затем с использованием библиотеки, такой как https://github.com/dbader/schedule, для выполнения заданий с запланированными интервалами в этом фоновом процессе.

...