Backend import и export
| Backend | Enum | Поведение |
|---|---|---|
| Тот же поток | INLINE | Выполняется в процессе запроса |
| Python queue | PYTHON_QUEUE | Очередь в памяти процесса |
| Фоновый worker | WORKER | Выбранный проектом провайдер worker |
WORKER сохраняет значение 3; CELERY — совместимый псевдоним. У форм и
ExecutionBackendSelect по одному is_available и choice_value, без флагов
отдельных провайдеров. Недоступный вариант отключается и отклоняется при POST.
Если worker подключён, он выбирается по умолчанию; иначе используется Python queue.
Общий механизм задач
Добавлено в 1.0.19Импорт/экспорт использует тот же протокол фоновых задач,
что и остальные задачи Chassis. ImportExportDispatchService сохраняет историю
и передаёт описание задачи и JSON-аргументы в WorkerService. Общий сервис
выбирает провайдер и публикует после commit. Обработчик, формы и отправка не
знают, какая библиотека worker выбрана.
Встроенная задача — process_import_export, очередь — chassis-import-export.
Аргументы — kind и строковый UUID истории. Импорт и экспорт используют один
обработчик и одно описание в django_chassis.worker_tasks.TASKS.
Dramatiq
Добавлено в 1.0.19pip install 'django-chassis[dramatiq]'
Сначала настройте брокер проекта, например через django-dramatiq или
dramatiq-postgres[django] и DRAMATIQ_BROKER. Затем зарегистрируйте задачи
Chassis в web и worker после инициализации Django и брокера:
from django_chassis.services import WorkerService
WorkerService.register_tasks()
Chassis использует брокер проекта. При ограничении worker по очередям включите
chassis-import-export; очистку Django-соединений настройте в интеграции.
Web и workers используют общую БД и хранилище файлов.
Celery
pip install 'django-chassis[celery]'
Настройте Celery как обычно: обнаружение модулей задач регистрирует тот же
реестр. Имя process_import_export и импорт
from django_chassis.tasks import process_import_export поддерживаются.
Вызов process_import_export.delay(kind=..., history_id=...) теперь проходит
через общий сервис worker и возвращает None. Он работает и с другими
провайдерами. Для обнаружения необязательных задач установка Celery не нужна.
Правила выполнения
Оба внешних адаптера переводят одни метаданные задачи: три повтора, задержка 1–30 секунд,
лимит выполнения пять минут, возраст сообщения одни сутки. Ошибки домена со
статусом FAILED терминальны; исключения, вышедшие из обработки, повторяет worker.
Блокировка строки истории удерживается всю обработку; завершённая история
пропускается при повторной доставке. Транзакции БД не откатывают внешние записи
в хранилище, поэтому обработка и файлы должны учитывать повторную доставку.
Inline и Python queue
Inline удерживает запрос до завершения. ImportExportPythonQueueService хранит
очередь в процессе и подходит для разработки или одного web-процесса. Для
нескольких web-workers используйте внешний worker.