Перейти к основному содержимому

Backend import и export

Добавлено в 1.0.1 Изменено в 1.0.19
BackendEnumПоведение
Тот же потокINLINEВыполняется в процессе запроса
Python queuePYTHON_QUEUEОчередь в памяти процесса
Фоновый workerWORKERВыбранный проектом провайдер 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.19
pip 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.

См. также​