Docs

Docs

Open in ChatGPT
Ask ChatGPT about this page
Open in Claude
Ask Claude about this page

Фоновые задания

Фоновые задания

Назначение

Сервис обеспечивает выполнение длительных или отложенных операций в фоновом режиме. Включает очереди заданий , воркеры (bench worker), планировщик (scheduler_events) и настраиваемые запланированные задачи (Scheduled Job Type).

Цели и задачи

  • Выполнять тяжелые операции (отчеты, рассылки, синхронизация) без блокировки интерфейса.
  • Планировать повторяющиеся задачи (ежедневно, еженедельно, по расписанию cron).
  • Распределять нагрузку по очередям (short, default, long) с разными таймаутами.
  • Запускать задания от имени администратора с контролем ошибок и логов.
  • Обеспечивать отказоустойчивость за счет очередей и воркеров.

Для кого

  • Разработчики, вызывающие Dinext.enqueue и настраивающие хуки планировщика.
  • Администраторы сервера, запускающие воркеры и планировщик.
  • Пользователи, инициирующие длительные операции (массовая рассылка, выгрузка), которые выполняются в фоне.

Основные понятия

  • Очередь (queue) — именованная очередь заданий: short (300 с), default (300 с), long (1500 с); можно задавать свои очереди в конфиге.
  • Воркер (worker) — процесс, обрабатывающий очередь: bench worker --queue short|default|long или несколько очередей.
  • Dinext.enqueue — постановка метода в очередь: Dinext.enqueue(method, queue='default', timeout=..., is_async=True, ...) или Dinext.enqueue_doc(doctype, name, method_name, ...).
  • Планировщик (scheduler) — выполнение задач по расписанию: хуки hourly, daily, weekly, monthly, *_long, all, cron; либо Scheduled Job Type без хука.
  • Задания выполняются от имени Administrator, если не указано иное.

Основные сущности / объекты

  • background_jobs.py, scheduler.py .
  • Конфигурация воркеров: common_site_config.json workers; burst-режим воркера (--burst).

Основные сценарии / процессов

Постановка задания в очередь (разработчик)

  1. В коде вызвать Dinext.enqueue("path.to.method", queue="default", timeout=300, arg1=val1) или Dinext.enqueue_doc("тип документа", docname, "method_name", ...).
  2. Метод будет выполнен воркером в указанной очереди; не блокирует текущий запрос.
  3. При ошибке в задании проверить логи воркера и Error Log в системе.
  4. Для длительных операций использовать очередь long и увеличить timeout в разумных пределах.

Запуск воркеров (администратор)

  1. Запустить воркер для очереди: bench worker --queue default (или short, long).
  2. Для нескольких очередей: bench worker --queue short,default.
  3. В production использовать systemd/supervisor для постоянной работы воркеров; при падении процесса перезапускать.
  4. Планировщик обычно запускается через bench schedule или встроенный механизм bench; убедиться, что он активен для ежедневных/ежечасных задач.

Планирование повторяющихся задач

  1. В приложении зарегистрировать хук в hooks.py: scheduler_events = { "hourly": ["app.module.hourly_task"], "daily": ["app.module.daily_task"] }.
  2. Либо создать Scheduled Job Type в системе и привязать метод без изменения кода приложения.
  3. Задачи выполняются по расписанию; логи и ошибки смотреть в логах планировщика и Error Log.

Правила и ограничения

  • Без запущенных воркеров задания в очереди не выполняются; планировщик также зависит от процесса scheduler.
  • Таймауты очередей ограничены (short/default 300 с, long 1500 с по умолчанию); очень длинные операции разбивать на шаги или увеличивать таймаут для своей очереди в конфиге.
  • Задания выполняются от имени Administrator; при необходимости проверять права внутри метода для «виртуального» пользователя или передавать user в аргументах и использовать Dinext.set_user().

Результаты / отчетность

  • Выполненные фоновые операции (отчеты, рассылки, синхронизация).
  • Логи воркеров и планировщика; Error Log при сбоях заданий.
  • Мониторинг очередей (размер очереди, задержки) при наличии инструментов мониторинга.

Типовые вопросы и ошибки (FAQ)

Задание не выполняется

Проверьте: воркер запущен для нужной очереди (bench worker --queue default); метод указан верно и доступен (import path); в логах воркера нет ошибки. При использовании enqueue_doc убедитесь, что документ существует и метод вызывается корректно.

Как выполнить задание синхронно (без очереди)?

Вызвать метод напрямую или использовать Dinext.enqueue(..., is_async=False) (тогда выполнится в том же процессе и может увеличить время ответа запроса). Для тяжелых операций предпочтительно оставлять is_async=True.

Где смотреть расписание задач?

В коде приложений — hooks.py, ключ scheduler_events. В системе — список Scheduled Job Type (если используется). Документация Dinext описывает стандартные события: hourly, daily, weekly, monthly, cron.

Связанные темы

Last updated 3 months ago
Was this helpful?
Thanks!