|
Многопоточная запись файлов в pdf в фоне | ☑ | ||
---|---|---|---|---|
0
jedbez
15.03.20
✎
12:26
|
Чтото не получается
8.3.16 Создаю на сервере многопоточную генерацию табличных документов, заполняю их (набор однотипных этикеток). На выходе получаю 1 табличный документ, который необходимо записать как pdf. Если без могопоточности то всё ок, а с ней выпадает Аварийно завершился процесс фонового задания. Причем 10 из 40 файлов записались корректно, и 2 по 15 байт Если отключить запись в файл, то тоже всё ок. Подскажите куда копать. КоличествоПотоковПечати = 4; МассивЗаданий = Новый Массив; Для каждого ЭлGTIN Из ТЗ Цикл //СформироватьЭтикеткиИЗаписатьВФайл(ЭлGTIN.GTIN); МассивПараметров = Новый Массив; МассивПараметров.Добавить(ЭлGTIN.GTIN); Задание = ФоновыеЗадания.Выполнить("ВзаимодействиеСервер.СформироватьЭтикеткиИЗаписатьВФайл", МассивПараметров); МассивЗаданий.Добавить(Задание); Если МассивЗаданий.Количество() >= КоличествоПотоковПечати Тогда Попытка ФоновыеЗадания.ОжидатьЗавершения(МассивЗаданий); Исключение ВызватьИсключение СтрШаблон(ТекстОшибки, ОписаниеОшибки()); КонецПопытки; МассивЗаданий.Очистить(); КонецЕсли; КонецЦикла; Если МассивЗаданий.Количество() > 0 Тогда Попытка ФоновыеЗадания.ОжидатьЗавершения(МассивЗаданий); Исключение ВызватьИсключение СтрШаблон(ТекстОшибки, ОписаниеОшибки()); КонецПопытки; МассивЗаданий.Очистить(); КонецЕсли; Процедура СформироватьЭтикеткиИЗаписатьВФайл(GTIN) Экспорт ******************* ПараметрыФормирования = Новый Структура ************************************** Данные = ПечатьЭтикеток.ПолучитьЭтикетки_V2(ПараметрыФормирования); Данные.ТД.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.PDF); КонецПроцедуры |
|||
1
acht
15.03.20
✎
12:33
|
А не в один и тот же файл ты их параллельно записать пытаешся?
|
|||
2
Garykom
гуру
15.03.20
✎
13:42
|
||||
3
Cyberhawk
15.03.20
✎
14:02
|
Что-то у тебя не тру-многопоточность - когда активных стало столько, сколько задано в настройке, все ставится на паузу до _полной_ обработки этой порции.
|
|||
4
jedbez
15.03.20
✎
15:38
|
(1) Нет, но все равно проверю. Наверно вставить надо проверку перед записью на существование файла.
(2) Сяп, почитаю. (3) Ну да, иначе перегрузка может произойти процессора. Итого, порциями по 4 потока. |
|||
5
jedbez
16.03.20
✎
01:55
|
(2) Познавательно. Но насколько я понял часть описанных принципов реализуется платформой 1С
Похоже проблема возникает при больших файлах, более 10 Мб. Решил проблему сохраняя pdf сначала в память, а мотом как двоичный код выгружаю в файл на диск. Птк = Новый ПотокВПамяти; Данные.ТД.Записать(Птк, ТипФайлаТабличногоДокумента.PDF); ДД = Птк.ЗакрытьИПолучитьДвоичныеДанные(); ДД.Записать(""+ПутьСохранения+"\"+ИмяФайла_); |
|||
6
jedbez
16.03.20
✎
12:49
|
Блин нгифига не решил, иногда ндаже на мелких файлах "Аварийно завершился процесс фонового задания"
|
|||
7
Cyberhawk
16.03.20
✎
13:26
|
(6) Платформу обнови
|
|||
8
Cyberhawk
16.03.20
✎
13:27
|
Не поможет - багрепорт на тестплатформ
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |