Skip to content

Worker

SyncMaster worker - это выделенный процесс, который получает новые запуски передачи данных из брокера сообщений, выполняет их и обновляет статус и URL логов в базе данных. Реализован с использованием Celery.

ПРИМЕЧАНИЕ

Каждый процесс worker привязан к одной или нескольким очередям. Вы должны создать их перед запуском worker. Это можно сделать через Фронтенд или через REST API REST API Сервера.

Значение поля slug очереди должно быть передано в аргумент Celery -Q. Например, для slug 123-test_queue это должно быть -Q 123-test_queue.

Установка и запуск

С использованием docker

  • Установите Docker

  • Установите docker-compose

  • Перейдите в фронтенд <http://localhost:3000>

  • Создайте новую группу

  • Создайте очередь в этой группе, а затем получите Queue.slug (например, 123-test_queue)

  • Выполните следующую команду:

$ docker compose --profile worker up -d --wait
...

docker-compose загрузит все необходимые образы, создаст контейнеры, а затем запустит worker.

Параметры можно установить через файл .env или раздел environment в docker-compose.yml

docker-compose.yml

config.yml

Без Docker

  • Установите Python 3.11 или выше

  • Установите Java 8 или выше

$ yum install java-1.8.0-openjdk-devel  # CentOS 7
$ dnf install java-11-openjdk-devel  # CentOS 8
$ apt-get install openjdk-11-jdk  # Debian-based
...
$ python -m venv /some/.venv
$ source /some/.venv/activate
...
  • Установите пакет syncmaster со следующими дополнительными зависимостями:
$ pip install syncmaster[server,worker]
...
  • Запустите REST API Сервер и Фронтенд

  • Создайте новую группу

  • Создайте очередь в этой группе, а затем получите Queue.slug (например, 123-test_queue)

  • Запустите процесс worker:

$ python -m celery -A syncmaster.worker.celery worker -Q 123-test_queue --max-tasks-per-child=1
...

Вы можете указать параметры, такие как параллелизм и очереди, добавив дополнительные флаги:

$ python -m celery -A syncmaster.worker.celery worker -Q 123-test_queue --max-tasks-per-child=1 --concurrency=4 --loglevel=info
...

Обратитесь к документации Celery для получения информации о более продвинутых опциях запуска.

Флаг --max-tasks-per-child=1 важен!

Смотрите также