#0
by adelaide
Пытаюсь реализовать многопоточность в 1С при помощи фоновых заданий. Обработка запускает 100 потоков (фоновых заданий), на выполнение им выделяется 20 секунд, после чего задания грохаются: тФоновоеЗадание.Отменить; и запускается новая партия фоновых заданий, так вот, проблема в том что не всегда они завершаются, и на сервере они накапливаются и база зависает. Версия платформы: 8.2.19.83
#2
by adelaide
что зачем? многопоточность? ну есть у меня такая задача, цены конкурентов парсить. Кусок кода, может в нем что не так :( :
#7
by adelaide
может и так, но оно у меня все равно будет запускать новые фоновые пока все не переварит... чтоб быстрей было не понял, как? приведи пример кода, у фонового задание есть свойство состояние но оно вроде только на чтение.
#8
by adelaide
вот как раз по тому примеру и делал, и после его отработки у меня скапливается много незавершенных фоновых заданий которые валят сервер, потому как этот кусок кода:
#9
by Torquader
Только мне одному кажется, что из-за "столкновения" транзакций задание может "повиснуть" на ожидании захвата блокировки объекта, то есть на обращении к SQL-серверу. В этом состоянии корректно его грохнуть не получится, так как транзакция отвалится, когда сервер ей позволит. В итоге, вы просто "загаживаете" буфер транзакций - оно вам надо ?
#11
by adelaide
короче кусок кода из он не завершает задания, он только ожидает их завершения, а если одно задание фейнулось он просто очистит массив и запустит новый пакет фоновых заданий.
#12
by adelaide
не в моем случае, у меня фоновые задания работают только с временным хранилищем, объекты СУБД не блокируются.
#13
by Torquader
А нафига они тебе вообще тогда - клади данные в файл и запускай процессы на php - там их душить не передушить, что хочешь, то с ними и делай.
#14
by adelaide
в конечном итоге хотелось бы решить задачу средствами 1С, оно конечно на php проще и ресурсов меньше будет жрать, но это еще php нужен...
#15
by Torquader
Просто, если процессы не обращаются к самой базе, то зачем они такие вообще нужны ?
#23
by Torquader
Ну, если все конкуренты друг у друга цены мониторят, то да - всё меняется очень и очень динамично.
#26
by MM
Запуск и остановка задания самая затратная по ресурсам штука, не правильнее ли реализовать, что-то вроде пула фоновых заданий. Или есть серьёзный риск, что они повиснут на сетевых операциях?
#27
by Torquader
Мне кажется, что это всё вообще можно на отдельную машину вынести, чтобы в 1С попадал только готовый результат.
#29
by adelaide
хм, возможно ты и прав, попробую, но это не отменяет проблемы корректного завершения фоновых заданий. Не, вполне хватает обычного i7
#31
by adelaide
не хотелка появилась задолго до майдана и уже больше чем пол года как фунциклирует :-Р.
#32
by adelaide
апну тему, платформа не завершает нормально фоновые задания, они остаются висеть в консоли, хотя из консоли их удается завершить.
#35
by Torquader
Потом, если вы лезете в сеть, то можно ожидать, что пока получение данных не окончено, соединение корректно не будет закрыто. А если в задания вставлять проверку наличия файлов и т.п., чтобы определить момент, когда его нужно максимально быстро завершить.
#36
by adelaide
>если вы лезете в сеть, то можно ожидать, что пока получение данных не окончено, соединение корректно не будет закрыто. Я выставляю таймаут для соединений. >А если в задания вставлять проверку наличия файлов и т.п., чтобы определить момент, когда его нужно максимально быстро завершить. Что имелось ввиду?
#39
by Torquader
Просто, если задание выполняет какое-то действие, то в нём нужно периодически проверять состояние какого-то флага, чтобы если он установлен - сразу его завершить. Кстати, по опросу в сеть - сколько максимально можно держать соединений в состоянии "установка" в XP, насколько я помню, было 10 - просто - остальные висят и не обращаются в сеть, пока им не дадут на это право - при этом, таймаут не считается, так как он начнёт считаться только с того момента, когда пакет пойдёт в сеть.
#40
by Torquader
Нормальное задание не может зависнуть - если, конечно вы их "валите", то есть вероятность подвесить tcp-стек, но тогда у вас уже не только задания, а и вообще всё взаимодействие будет висеть.
#41
by adelaide
с флагом конечно вариант, но не думаю что изнутри оно лучше отработает чем снаружи, так как я после таймаута данного на выполнение фоновых заданий прохожусь по массиву этих заданий и грохаю их: Задание = ФоновыеЗадания.Выполнить("Многопоточность.МП_ПолучениеПредложений", МассивПараметров, Ключ, "ПолучениеПредложений"); у меня виндовс сервер 2008, там вроде таких ограничений нет.
#42
by Torquader
А ты уверен, что интернет-канал таких ограничений не имеет. Потом, я бы как-то научился общаться с заданиями, чтобы знать, в каком оно состоянии находится, а не только - вам дано время или сделай или сдохни.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Иерархический вывод результата в построитель отчета
- Как найти в сети IP-камеры
- v8: как удалить старых агентов сервера 1с
- Хитрости СКД
- Возможна ли реализация товаров по нулевой цене в УТ 11.1?
- Расчет себестоимости УПП
- v7: Не выбрано субконто партии строка 1 не сохраняется.
- Проблема в СКД-отчете, в WEB-клиенте.
- Как вывести день недели вместе с датой в СКД?
- БП 3.0 Запрет на изменение определенного вида документа
- Списание ОС в НУ при нелинейном методе 1С 8 УПП
- Сохранение в Word табличного документа из 1С
- Зависает отчет у некоторых пользователей.
- Списание материалов по фиксированной стоимости. УПП 1.3.48.2
- Как убрать пробелы из поля СКД
- изменить реквизит регистра сведений
- (Microsoft OLE DB Provider for SQL Server): Время ожидания истекло
- При закрытии месяца в НУ списывается сразу годовая амортизация
- "ТипЗнач" в запросах на платформе 8.1 должно работать?
- УФ Открытие связанного регистра из формы элемента справочника по "Перейти"