Фоновые задания в http-сервисах OneScript

Публикация № 805545

Разработка - Языки и среды - OneScript

Web OneScript фоновые задания ФоновыеЗадания многопоточность

49
В статье описана библиотека, реализующая механизм фоновых заданий в http-сервисах OneScript, а также некоторые обновления платформы 1.0.19

 

Введение

При разработке приложений, периодически возникают задачи, требующие одновременного  выполнения нескольких процессов. В платформе 1С:Предприятие данная функциональность реализована при помощи механизма фоновых заданий. В стандартной поставке OneScript данная функциональность отсутствует, поэтому целью настоящей статьи является описание библиотеки, которая реализует механизм фоновых заданий в web-приложениях (http-сервисах) OneScript.

 

Описание

Библиотека реализует типы МенеджерФоновыхЗаданийWeb, СостояниеФоновогоЗадания и ФоновоеЗаданиеWeb, которым в платформе 1С:Предприятие соответствуют типы МенеджерФоновыхЗаданий и ФоновоеЗадание соответственно.

Реализованные типы

МенеджерФоновыхЗаданийWeb

Методы:

  • Выполнить
  • ОжидатьЗавершения
  • ПолучитьФоновыеЗадания

ФоновоеЗаданиеWeb

Свойства:

  • ИмяМетода
  • ИнформацияОбОшибке
  • Ключ
  • Конец
  • Наименование
  • Начало
  • РазделениеДанных
  • РегламентноеЗадание
  • Состояние
  • УникальныйИдентификатор

Методы:

  • ОжидатьЗавершения
  • Отменить
  • ПолучитьСообщенияПользователю

СостояниеФоновогоЗадания

Аналогичен соответствующему типу в 1С:Предприятие.

 

Отличия от платформы 1С:Предприятие

Библиотека практически полностью совместима с платформой 1С:Предприятие на уровне кода, однако все-же имеются незначительные отличия:

ФоновыеЗаданияWeb.ПолучитьФоновыеЗадания

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

ФоновоеЗаданиеWeb.РазделениеДанных

Всегда возвращает пустую структуру

ФоновоеЗаданиеWeb.РегламентноеЗадание

Ввиду отсутствия регламентных заданий, всегда возвращает Неопределено.

ФоновоеЗаданиеWeb.Отменить

Ввиду особенностей реализации, вызов этого метода не приводит к каким-либо действиям (задание продолжает выполнение и не отменяется).

ФоновоеЗаданиеWeb.ПолучитьСообщенияПользователю

Всегда возвращает пустой фиксированный массив.

 

Установка

Предварительные условия

Для использованиия настоящей библиотеки, необходимо установить обновление платформы OneScript, которое улучшает многопоточность http-сервисов OneScript.

Обновление для OneScript версии 1.0.19  можно скачать по нижеследующей ссылке: ASPNETHandler-v1.1-1.0.19.zip . Установка производится простым копированием содержимого архива, поверх файлов поставки OneScript.

Описание обновления, а также сопутствующих библиотек доступно по ссылке.

 

Установка библиотеки

Установка осуществляется копированием файлов dll в папку Bin веб-приложения. Затем, необходимо подключить библиотеку, добавив нижеследующую строку в секцию <appSettings>, файла web.config:

<add key="WebBackgroundJobs" value="attachAssembly" />

Настроить интервал проверки состояния фоновых заданий для метда ОжидатьЗавершения, можно добавив в раздел <appSettings>, файла web.config нижеследующий ключ:

<add key="jobsCheckInterval" value="5000" />

Интервал задается в миллисекундах. Интервал проверки по умолчанию (если ключ не установлен) составляет 1000 миллисекунд.

 

Использование

Ниже приведен фрагмент кода, иллюстрирующий работу библиотеки:

// Создаем объект менеджера фоновых заданий. Только для OneScript
//<OneScript>
ФоновыеЗадания = Новый МенеджерФоновыхЗаданийWeb;
//<!OneScript>

// Запускаем фоновые задания на выполнение
	
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(1);
МассивПараметров.Добавить("1.txt");
	
ФоновыеЗадания.Execute("Тестовый.ТестовоеФЗ", МассивПараметров, "Ключ1", "Описание1");
	
МассивПараметров = Новый Массив;
МассивПараметров.Добавить(1);
МассивПараметров.Добавить("2.txt");
	
ФоновыеЗадания.Execute("Тестовый.ТестовоеФЗ", МассивПараметров);

// Получаем все выполняющиеся задания
МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания();

// Ожидаем завершения выполнения запущеных заданий
ФоновыеЗадания.ОжидатьЗавершения(МассивЗаданий);

// Продолжаем выполнение

 

Заключение

Надеюсь, что использование настоящей библиотеки, совместно с библиотеками обработки контента , работы с субд и кэширования данных, позволят вам создавать “взрослые” web-приложения на базе каркасной конфигурации, которые совместно с 1С:Предприятие, позволяют решать реальные бизнес-задачи ваших клиентов.

49

Скачать файлы

Наименование Файл Версия Размер
Библиотека, реализующая фоновые задания:
.zip 6,80Kb
28.03.18
4
.zip 6,80Kb 4 Скачать

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. starik-2005 1959 29.03.18 12:39 Сейчас в теме
А sleep в oneScript'е есть? А то без него управление многопоточными вычислениями мягко говоря ущербно...
2. blackhole321 1040 29.03.18 12:43 Сейчас в теме
(1)sleep есть, называется Приостановить. Честно говоря и без sleep ничего ущербного не вижу. Если не секрет -зачем создавать поток и стоить его?
3. blackhole321 1040 29.03.18 12:44 Сейчас в теме
4. starik-2005 1959 29.03.18 12:50 Сейчас в теме
(3) стопить не поток, а управляющую процедуру, чтобы не проверять мульон раз в секунду, завершился у меня расчет в потоке или нет. Т.е. так как-то:
  Пока ЕстьПотоки() Цикл
  Если ЕстьЗавершенныйПоток() Тогда
    Данные = ПолучитьСледующуюПорциюДанных();
    Если Данные = Неопределено Тогда
      Прервать;
    КонецЕсли;
    ДобавитьВСписокФЗ(
      ФоновыеЗадания.Выполнить("МодульФЗ.ОбработкаДанных", ПолучитьЗначениеВМссиве(Данные), ...)
      );
   КонецЕсли;
   Подождать 10мс;
  КонецЦикла;
  ДождатьсяЗавершенияВЗ();
Показать
sasha777666; +1 2 Ответить
5. blackhole321 1040 29.03.18 13:04 Сейчас в теме
(4) Понятно. Можно в самом потоке, при завершении инициировать новый поток, если остались данные для обработки.
6. starik-2005 1959 29.03.18 13:09 Сейчас в теме
(5)
если остались данные для обработки.
Тогда это не параллельность, а последовательное выполнение. Смысл теряется...
7. blackhole321 1040 29.03.18 13:14 Сейчас в теме
(6) Ну почему же, Вы можете сделать столько потоков, сколько элементов данных, подлежащих обработке (по крайней мере несколько, если у Вас некий пул), также, как Вы делаете в цикле, только в самих потоках.
8. starik-2005 1959 29.03.18 13:19 Сейчас в теме
(7) а микросекундный sleep есть?
9. blackhole321 1040 29.03.18 13:32 Сейчас в теме
(8)Думаю - нет, ведь и Linux и Windows не ОС реального времени, в Windows квант времени ~10-20 миллисекунд, поэтому даже если написать Sleep(1), то задержка будет > 1 мс.
10. blackhole321 1040 29.03.18 13:33 Сейчас в теме
(8) А если не секрет, зачем Вам такие малые задержки?
11. blackhole321 1040 29.03.18 13:55 Сейчас в теме
(8) Вот есть к примеру такая реализация микросекундного таймера https://www.codeproject.com/Articles/98346/Microsecond-and-Millisecond-NET-Timer , которую не сложно перенести, однако, как отмечает сам автор, если использовать в не real-time ОС, периодически интервалы будут неверными.
12. starik-2005 1959 29.03.18 14:23 Сейчас в теме
(11) периодические интервалы тут не особо критичны. Фактически если у Вас N заданиий, которые обрабатывают по M блоков, то массив из Х блоков они обработают за Х/M/N раз. При том если элемент данных обрабатывается за разное время, то некоторые блоки должны будут обработаться раньше, чем другие, и ДождатьяЗавершения будет ждать самый долгообрабатываемый блок. Для того, чтобы загрузить новые процессы данными, нужно их стартануть с новым массивом обрабатываемой информации. Если ждать секунду (как в 1С, когда народ юзает "ping localhost"), то за секунду можно некоторое количество элементов уже обработать. Поэтому хорошо бы ждать 1/10-ю секунды, например. И на сколько это в миллисекундах точно - второй вопрос, главное чтобы в это время процессор просто ждал...
13. blackhole321 1040 29.03.18 15:19 Сейчас в теме
(12)
Если ждать секунду (как в 1С, когда народ юзает "ping localhost"), то за секунду можно некоторое количество

Ну 1/10 секунды - это 100 миллисекунд, что вполне нормально и для Sleep, который уже есть. И это будет действительно приостановка выполнения. Вот описание метода, который реализует Sleep в OneScript https://msdn.microsoft.com/ru-ru/library/system.threading.thread.sleep(v=vs.110).aspx

Моя изначальная мысль была в том, что можно запускать потоки для обработки новых порций данных из самих потоков, примерно так:

Процедура МоеФЗ(ДанныеДляОбработки) Экспорт
	
	// Что-то делаем
	
	Отбор = Новый Структура;
	Отбор.Вставить("Состояние", СостояниеФоновогоЗадания.Активно);
	Отбор.Вставить("ИмяМетода", "МойМодуль.МоеФЗ");
	МассивЗаданий = ФоновыеЗадания.ПолучитьФоновыеЗадания(Отбор);
	
	МаксКоличествоПотоков = 5;
	КоличествоПотоков = МаксКоличествоПотоков - МассивЗаданий.Количество() + 1;
	
	Для Индекс = 1 По КоличествоПотоков Цикл
		
		ДанныеДляОбработки = ПолучитьСледующуюПорциюДанных();
		
		Если ДанныеДляОбработки = Неопределено Тогда
			Возврат;
		КонецЕсли;
		
		МасиивПараметров = Новый Массив;
		МассивПараметров.Добавить(ДанныеДляОбработки);
		ФоновыеЗадания.Выполнить("МойМодуль.МоеФЗ", МассивПараметров);
		
	КонецЦикла;
	
КонецПроцедуры
Показать
Оставьте свое сообщение

См. также

OneScript - WinExt: Работа с окнами, управление мышкой и клавиатурой 74

Инструменты и обработки Программист Архив с данными Windows Абонемент ($m) OneScript

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

1 стартмани

29.11.2018    8021    8    ret-Phoenix    30       

Динамическое выполнение кода OneScript из 1С:Предприятие 31

Статья Программист Конфигурация (md, cf) v8 Абонемент ($m) OneScript

В статье описан подход, позволяющий динамически выполнять фрагменты кода OneScript из 1С:Предприятие и получать результаты выполнения

1 стартмани

03.11.2018    8887    6    blackhole321    19       

Синхронизация хранилища 1С и git-репозитория с применением OneScript и Gitsync. Методика и пошаговая инструкция для создания скрипта и его регулярного запуска 190

Статья Системный администратор Программист Архив с данными v8 Абонемент ($m) OneScript

- Настройка репозитория для работы с большими типовыми конфигурациями  - Алгоритм создания скрипта выгрузки и его исходный код  - Обработка исключительных ситуаций  - Рекомендации по дальнейшему развитию процесса 

1 стартмани

14.09.2018    20417    24    Vladimir Litvinenko    87       

Виртуальная дисконтная карта на OneScript 19

Инструменты и обработки Программист Конфигурация (md, cf) v8 УУ Оптовая торговля Розничная торговля Абонемент ($m) OneScript

В статье рассмотрены возможности http-сервисов OneScript для создания бизнес-приложений, на примере демонстрационной конфигурации, реализующей функционал виртуальной дисконтной карты.

1 стартмани

17.07.2018    5727    4    blackhole321    6       

Платежи через RoboKassa из web-приложения OneScript 16

Статья Программист Конфигурация (md, cf) v8 Абонемент ($m) OneScript

В статье рассмотрен пример организации платежей из web-приложения OneScript через платежную систему RoboKassa

1 стартмани

27.06.2018    5334    4    blackhole321    0       

Создаем сайт ресторана на OneScript 91

Инструменты и обработки Программист Конфигурация (md, cf) v8 Рестораны, кафе и фаст-фуд Абонемент ($m) OneScript

В статье изучаются возможности http-сервисов OneScript по созданию web-приложений на примере сайта ресторана

1 стартмани

19.06.2018    12010    16    blackhole321    63       

HTTP-сервисы OneScript. Каркасная конфигурация 2.0 63

Инструменты и обработки Программист Архив с данными v8 Абонемент ($m) OneScript

В статье описана новая версия конфигурации для создания web-приложений на основе http-сервисов OneScript в среде 1С:Предприятие.

1 стартмани

05.06.2018    10585    27    blackhole321    6       

Упрощаем разработку взаимодействия с СУБД в http-сервисах OneScript 14

Статья Программист Конфигурация (md, cf) v8 Абонемент ($m) OneScript

В статье описана библиотека и подсистема, позволяющие упростить разработку взаимодействия с СУБД в http-сервисах OneScript

1 стартмани

30.05.2018    5834    2    blackhole321    1       

Yep Cart. Пишем интернет-магазин на http-сервисах OneScript 44

Статья Программист Конфигурация (md, cf) v8 УУ Оптовая торговля Розничная торговля Абонемент ($m) OneScript

В статье описана демонстрационная конфигурация, реализующая простейший интернет магазин на http-сервисах OneScript, интегрированный с 1С:Предприятие.

1 стартмани

16.04.2018    9797    15    blackhole321    33       

Кэшируем данные в приложениях OneScript 7

Статья Программист Архив с данными Абонемент ($m) OneScript

В статье описана библиотека, позволяющая кэшировать данные в памяти, в ваших приложениях OneScript.

1 стартмани

25.03.2018    6802    2    blackhole321    2       

Yep - простая flat-file CMS на OneScript 40

Статья Программист Архив с данными v8 1cv8.cf Абонемент ($m) OneScript

В статье рассмотрено создание простейшей flat-file CMS, на основе каркасной конфигурации для web-приложений OneScript, в среде 1С:Предприятие.

1 стартмани

02.03.2018    11808    7    blackhole321    32       

Конфигурация для создания web-приложений OneScript из 1С:Предприятие 112

Статья Программист Архив с данными v8 1cv8.cf Абонемент ($m) OneScript

В статье описана методика создания web-приложений OneScript на основе каркасной конфигурации в среде 1С:Предприятие

1 стартмани

23.02.2018    16695    20    blackhole321    67       

Создаем "кроссплатформенную" библиотеку для OneScript и 1С:Предприятие 48

Статья Программист Конфигурация (md, cf) v8 Абонемент ($m) OneScript

Описана методика создания внешних компонент для OneScript и 1С:Предприятие, переносимых на уровне прикладного кода.

1 стартмани

05.02.2018    11856    4    blackhole321    7       

Знакомимся с HTTP-сервисами в OneScript 76

Статья Программист Архив с данными v8 1cv8.cf Абонемент ($m) OneScript

В статье описан механизм HTTP-сервисов в OneScript, а также приведен пример интеграции и совместной работы с 1С:Предприятие

1 стартмани

15.01.2018    14536    18    blackhole321    15       

OneScript SQL - работа с СУБД 113

Инструменты и обработки Программист Архив с данными Абонемент ($m) OneScript

Внешняя компонента, реализующая возможность работы с базами данных из OneScript (https://infostart.ru/public/548028/ , https://infostart.ru/public/327581/). Поддерживаются базы: sqlite, MS SQL Server, MySQL, PostgreSQL.

1 стартмани

12.09.2017    17176    16    ret-Phoenix    35       

OneScript и Ajax. Создание GET-запроса 6

Инструменты и обработки Программист Архив с данными ИТ-компания Россия Абонемент ($m) OneScript

Создание GET-запроса на OneScript с помощью библиотеки UfaScript.osb. Описание шаблона OneScript.zip для Joomla. Главный файл шаблона Index.php генерируется функциями из библиотеки UfaScript.osb.

1 стартмани

05.06.2017    6824    andreosh    0       

Функционал Gulp на OneScript 3

Инструменты и обработки Программист Архив с данными Россия Абонемент ($m) OneScript

Как использовать OneScript для автоматического запуска обработки сохраненного файла.

1 стартмани

05.06.2017    7234    andreosh    1       

Примеры скриптов на OneScript 140

Инструменты и обработки Системный администратор Архив с данными Россия Windows Абонемент ($m) OneScript

В своей работе нам часто приходится заниматься рутинными операциями. При небольшом их объеме "ручное" выполнение еще допустимо, но с ростом их числа все мы задумываемся об автоматизации. Вот тут нам на помощь и приходят скрипты. На этом сайте уже выложено немало примеров различных скриптов, вот и я решил внести свою лепту.

1 стартмани

14.07.2016    24913    39    Drak0n    43       

Как решать повседневные задачи с помощью OneScript 465

Статья Системный администратор Программист Документ XML Абонемент ($m) OneScript

Если вам не нравится выполнять рутинные операции вручную. Если вы 1С-ник, который хоть раз в жизни писал BAT-CMD-файлы для автоматизации, или который время от времени вынужден вспоминать особенности черной магии Powershell, то эта статья для вас. Теперь можно все это делать на языке 1С. Интересно? Читайте дальше!

1 стартмани

04.02.2015    67426    17    Evil Beaver    211