Перайсці да зместа

Фонавыя заданні

Пакет утрымлівае пункт уваходу worker і захаваны стан аперацый. Чарга, broker, планавальнік і залежнасць Celery падключаюцца праектам. Без адаптара аперацыі звыш bulk_background_threshold адхіляюцца да пабудовы плана.

Адаптар праекта

Прыклад інтэграцыі: патрэбныя функцыі вашага праекта
from django.test import RequestFactory
from modelsheet.adapters import BackgroundAdapter

# Імпартуйце load_authorized_tenant і project_queue са свайго праекта.

class ProjectBackgroundAdapter(BackgroundAdapter):
    def capture_context(self, request):
        return {"tenant_id": request.tenant.pk}

    def restore_context(self, user, context):
        request = RequestFactory().post("/modelsheet-worker/")
        request.user = user
        request.tenant = load_authorized_tenant(user, context["tenant_id"])
        return request

    def enqueue(self, operation_id, phase):
        project_queue.enqueue(
            "modelsheet.background.process", operation_id, phase
        )

Задайце шлях класа ў MODELSHEET["background_adapter"]. Гэта прыклад кантракта, не гатовы драйвер: рэалізуйце аўтарызаваную загрузку tenant і надзейную дастаўку.

Аднаўленне доступу

Не перадавайце ў чаргу Django request, queryset або pickled-карыстальніка. Захоўвайце мінімальны кантэкст. Пункт уваходу нанова загружае актыўнага staff-карыстальніка і зарэгістраваны Admin, правярае правы і вобласць. Калі кантэкст аднавіць немагчыма, заданне адхіляецца.

Фазы

preview фіксуе поўны набор кандыдатаў і значэнні ў worker, пасля чаго чакае яўнага пацвярджэння. run выконвае менавіта гэтыя элементы. Чарга павінна забяспечваць дастаўку прынамсі адзін раз. Паўторы і аднаўленне пасля пратэрмінавання арганізуе інтэграцыя.

Памылка пастаноўкі дае dispatch_failed і ID аперацыі; працяг паўтарае пастаноўку.

Lease і паўторы

Worker захоплівае пяціхвілінны lease і fencing token. Запіс мадэлі, элемент аўдыту і адзнака выканання радка фіксуюцца разам. Завершанае не ўжываецца паўторна. Пасля збою дачакайцеся заканчэння lease перад працягам; манітор мусіць вяртаць пакінутыя заданні ў чаргу. Дубль паведамлення не выконвае непацверджаны план і не перабудоўвае гатовы прагляд.

Адмена і частковы вынік

Адмена дзейнічае паміж порцыямі, выкананае застаецца. Працяг апрацоўвае незавершанае, не памылковыя або завершаныя элементы. Для канфліктаў патрэбны новы прагляд. Сінхроннае выкананне атамарнае, фонавае можа быць частковым без аўтаматычнага адкату порцый. Знешнім эфектам сігналаў патрэбная ўласная ідэмпатэнтнасць.

Памяць і межы

Папярэдні прагляд матэрыялізуе да max_bulk_rows у памяці worker і публікуе план адной транзакцыяй. Гэта не неабмежаваны струменевы рухавік. Наладзьце ліміты пад сваю мадэль і БД. Агрэгаты выкарыстоўваюць захаваныя ўваходы, кожная порцыя правярае версіі ўласных мэтавых радкоў перад запісам.