Использование фоновых заданий во внешней обработке.

1. ekaruk 4904 16.10.14 14:06 Сейчас в теме
Есть внешняя обработка, которая достаточно долго выполняется.
Возникла мысль распараллелить ее работу.

Подскажите, возможно ли использовать из внешней обработки фоновые задания?
Возможно, есть какие-то примеры использования.
+
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. spezc 782 16.10.14 14:07 Сейчас в теме
как вы представляете процесс распараллеливания?
+
3. ekaruk 4904 16.10.14 14:11 Сейчас в теме
(2) spezc, обработка получает данные запросами.
Хочу часть этих запросов выполнить через фоновые задания и потом собрать результат в исходной обработке.
+
4. spezc 782 16.10.14 14:37 Сейчас в теме
смотрите типовую БП 3.0, там такое есть
+
5. spezc 782 16.10.14 14:38 Сейчас в теме
или в синтаксис помощнике
МенеджерФоновыхЗаданий.Выполнить (BackgroundJobsManager.Execute)
МенеджерФоновыхЗаданий (BackgroundJobsManager)
Выполнить (Execute)
Синтаксис:

Выполнить(<ИмяМетода>, <Параметры>, <Ключ>, <Наименование>)
Параметры:

<ИмяМетода> (обязательный)

Тип: Строка.
Имя экспортируемой процедуры или функции неглобального общего модуля, который может быть выполнен на сервере, в форме ИмяМодуля.ИмяМетода.
<Параметры> (необязательный)

Тип: Массив.
Массив параметров, передаваемых в метод. Количество и типы параметров должны соответствовать параметрам метода.
<Ключ> (необязательный)

Тип: Строка.
Ключ задания. Если ключ задан, то он должен быть уникальным среди ключей активных фоновых заданий, имеющих такое же имя метода, что и у данного фонового задания.
<Наименование> (необязательный)

Тип: Строка.
Описание задания.
Возвращаемое значение:

Тип: ФоновоеЗадание.

Описание:

Инициирует выполнение фонового задания. Задание выполняется от лица текущего пользователя. Выполнение происходит без ожидания завершения задания. Если задан ключ задания, он должен быть уникальным среди ключей активных заданий.

Доступность:

Сервер, толстый клиент, внешнее соединение.
+
7. ekaruk 4904 16.10.14 14:52 Сейчас в теме
(5) spezc, Похоже на то.
Остался вопрос, как в <ИмяМетода> передать экспортный метод внешней обработки, которая не включена в конфигурацию?
+
9. spezc 782 16.10.14 14:55 Сейчас в теме
6. МихаилМ 16.10.14 14:43 Сейчас в теме
8. ekaruk 4904 16.10.14 14:53 Сейчас в теме
(6) МихаилМ, Я правильно понимаю, что в любом случае будет не более одного параллельного процесса?
+
10. МихаилМ 16.10.14 16:35 Сейчас в теме
не знаю.
к (6) добавить мне нечего. иначе добавил бы.
+
11. МихаилМ 16.10.14 16:56 Сейчас в теме
использовать можно. если вызвать методы общих не глобальных методов конфигурации.
можно создать в конфигрурации метод , который будет выполнять произвольный код (Выполнить()) , но это бэк дор
и возможно 1с это блокирует
+
12. harmer 1 16.10.14 17:02 Сейчас в теме
14. ekaruk 4904 16.10.14 17:59 Сейчас в теме
(12) harmer, Спасибо, теорию я понмаю.
Вопрос в том, как из внешней обработки запустить фоновое задание без модификации конфигурации.
Причем это задание теоретически должно выполниться в другом сеансе этой же обработкой.
(13) МихаилМ, внешняя компонента, если Вы о ней, это похой вариант.
+
15. Boneman 298 16.10.14 22:27 Сейчас в теме
(14) ekaruk, запустить можно,
только надо правильно все подключить, и покопаться в БСП конфы, чтобы с нужными параметрами запустить процедуры.
+
16. ekaruk 4904 16.10.14 22:40 Сейчас в теме
(15) Boneman, Можно пример?
Или хотя бы общую идею.
Хотя бы куда в БСП копать.

У меня была мысль, что можно обратиться, если подключить обработку.
Но скорее всего из фонового сеанса подключенная в другом сеансе обработка не будет видна.
+
18. starik-2005 3036 20.12.14 17:12 Сейчас в теме
(16) ekaruk,
1. Фоновое задание выполняет только экспортные функции общих модулей.
2. Для того, чтобы распараллелить что-либо, можно использовать Выполнить(код).
3. Исходя из 2, нужно вызвать экспортную функцию, способную выполнить код, и передать в нее код и параметры.

Типа так:
параметры = новый массив;
параметры.Добавить(КодАлгоритма);
параметры.Добавить(параметрыАлгоритма);

ФЗ = ФоновыеЗадания.Выполнить("ОбщийМодуль.ВыполнитьКод",Параметры);
ФЗ1 = ...
ФЗ2 = ...
..
ФоновыеЗадания.Ожидать(ФЗ);
ФоновыеЗадания.Ожидать(ФЗ1);
ФоновыеЗадания.Ожидать(ФЗ2);
..

Подразумевается, что в общем модуле есть функция с параметрами (код, параметры), которая реализует логику Выполнить(код).
+
13. МихаилМ 16.10.14 17:10 Сейчас в теме
у Elisy

была vk создающая многопоточность
+
17. hardkotian 13.12.14 17:17 Сейчас в теме
Те же грабли.

На примере УТ11 видно, что в модуле ДлительныеОперации вызывается "РаботаВБезопасномРежиме.ВыполнитьМетодКонфигурации", где и происходит проверка на принадлежность к конфигурации переданное в фоновое задание имя экспортной процедуры.
Но даже если бы этого не было - вызвать экспортную процедуру ВнешнейОбработки, а это значит конкретного экземпляра!? - невозможно. Инными словами, во внешних обработках нет модуля менеджера, есть только модуль объекта. Поэтому вызов процедуры в фононовои задании конкретного экземпляра не может быть произведен.

А было бы не плохо...
+
19. It-developer 24 17.07.17 12:16 Сейчас в теме
Обработчики ожидания в sql с разными именами. количество потоков = количество обработчиков с именем МойОбработчикK (K = 1..N)
+
20. DarkAn 1081 18.07.17 12:42 Сейчас в теме
Если вопрос еще актуален :) http://infostart.ru/public/626117/
В БД, должен быть только 1 Общий модуль из поста выше. А дальше весь код располагать только во внешней обработке, включая тот, что должен выполняться в фоновых заданиях.
+
21. Xershi 1484 21.08.17 19:41 Сейчас в теме
Вот отличную статью написали https://infostart.ru/public/525648/. А в комментах оставил как быстро расспараллелить потоки! Но могут быть блокировки, но это не страшно.
+
Внимание! Тема сдана в архив

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот