/TaskManagerFor1C

Инструмент для создания параллельных алгоритмов с гарантированным выполнением в среде 1С Предприятия

Primary LanguageShellMozilla Public License 2.0MPL-2.0

TaskManagerFor1C

Библиотека TaskManagerFor1C предназначена для создания асинхронных и параллельных алгоритмов с гарантированным выполнением в среде 1С Предприятия на базе фоновых заданий.

Файлы поставки доступны на закладке с релизами.

Цели TaskManagerFor1C:

  • Повышение производительности программных продуктов за счет добавления параллелелизма в программный код;
  • Повышение продуктивности разработчиков за счет упрощения работы по управлению заданиями.

Область применения

  • Использование параллельных вычислений в автоматизации бизнес процессов;
  • Параллельное выполнение запросов в долгих отчетах/обработках;
  • Процессы загрузки/выгрузки данных;
  • Организация нагрузочного тестирования.

Принцип работы

Принцип работы

Настройка

Для настройки нужно использовать обработку "Управление менеджером заданий".

Управление менеджером заданий

Доступные настройки:

  • Ограничение на количество исполнителей - для балансировки нагрузки на сервер 1С. Принимает значение от 0 до 9999. При значении 0 задания в работу браться не будут.
  • Глубина хранения истории (дни) - если указано значение отличное от 0, тогда подсистема сама будет чистить информацию по старым выполненным заданиям оставляя последние N дней указанных в настройке.

Запуск подсистемы, остановка и очистка очереди выполняется верхними, говорящими за себя кнопками.
В качестве индикатора работы подсистемы выступает флаг Менеджер запущен.

При нажатии на кнопку с шестеренкой (рядом с кнопкой Все действия) открываются настройки методов-обработчиков:

  • Максимальное количество попыток выполнения - при достижении лимита на количество попыток выполнения задание будет автоматически отменяться;
  • Пауза перед новой попыткой выполнения - время отсрочки повторного запуска в секундах. В качестве отправной точки отсчета используется время начала неудачной попытки выполнения. Если НачалоВыполнения + ПаузаПередНовойПопыткой > текущего времени, то задание ставится на паузу. Когда НачалоВыполнения + ПаузаПередНовойПопыткой становится <= текущему времени, задание с паузы снимается;
  • Максимальное количество исполнителей - персональное ограничение метода-обработчика на количество исполнителей;
  • Приоритет метода-обработчика - задания с максимальным приоритетом всегда выдаются из очереди первыми.

Жизненный цикл задания

Жизненный цикл задания

Программный интерфейс

ДобавитьЗадание(ИмяМетода, Параметры)

Добавляет новое задание в очередь. На задания в очереди
распространяется ограничение на количество одновременно
работающих исполнителей.
 
Параметры:
	ИмяМетода - точка входа для выполнения задания.
		Сигнатура метода должна быть с одним параметром,
		например, МетодЗадания(Параметры).
	Параметры - структура содержащая необходимые входные
		данные, для выполнения задания. При добавлении
		расширяется свойством "КлючЗадания", значением
		которого будет идентификатор задания в очереди.
Возвращает:
	Идентификатор задания.

ДобавитьЗаданиеВнеОчереди(ИмяМетода, Параметры)

Запускает асинхронное выполнение задания минуя очередь.

На такие задания ограничение на количество исполнителей НЕ распространяется, НО квота используется

Параметры:
	ИмяМетода - точка входа для выполнения задания.
		Сигнатура метода должна быть с одним параметром,
		например, МетодЗадания(Параметры).
	Параметры - структура содержащая необходимые входные
		данные, для выполнения задания. При добавлении
		расширяется свойством "КлючЗадания", значением
		которого будет идентификатор задания в очереди.
Возвращает:
	Идентификатор задания.

ПолучитьСостояниеЗадания(КлючЗадания)

Позволяет получить текущее состояние задания.

Параметры:
	КлючЗадания - идентификатор задания.
Возвращает:
	Состояние задания.

ОжидатьСостояниеЗадания(КлючЗадания, ОжидаемоеСостояние, Таймаут = 5)

Усыпляет текущий поток до установления указанного состояния
у задания либо до истечения указанного времени.

Параметры:
	КлючЗадания - идентификатор задания.
	ОжидаемоеСостояние - состояние, которого хотим дождаться.
	Таймаут - максимальное время ожидания, сек.
Возвращает:
	Истина, если состояния дождались иначе Ложь.

ОжидатьИзмененияСостояния(КлючЗадания, ТекущееСостояние, Таймаут = 5)

Усыпляет текущий поток до изменения состояния у задания
с указанного на любое другое либо до истечения указанного
времени.

Параметры:
	КлючЗадания - идентификатор задания.
	ТекущееСостояние - состояние с которого хотим уйти.
	Таймаут - максимальное время ожидания, сек.
Возвращает:
	Истина, если состояния дождались иначе Ложь.

ДождатьсяВыполнения(КлючиЗаданий, Таймаут = 5)

Усыпляет текущий поток до выполнения указанного списка
заданий либо до истечения указанного времени.

Параметры:
	КлючиЗаданий - массив с идентификаторами заданий.
	ТекущееСостояние - состояние с которого хотим уйти.
	Таймаут - максимальное время ожидания, сек.
Возвращает:
	Истина, если состояния дождались иначе Ложь.

ОтменитьЗадание(КлючЗадания)

Отменяет задание, если оно находится в состоянии Ожидает.

Параметры:
	КлючЗадания - идентификатор задания.

ОтменитьВсеЗаданияВОчереди()

Отменяет все задания в состоянии Ожидает и НаПаузе.

СократитьИсториюВыполненияЗаданий( ТребуемаяГлубинаИсторииВДнях)

Очищает информацию по старым выполненным заданиям оставляя
последнее указанное количество дней. Предназначен для "ручного"
управления историей выполнения заданий.

Параметры:
	ТребуемаяГлубинаИсторииВДнях - количество дней истории,
		которые необходимо оставить.