Вход | Регистрация
 

Как получить прогресс выполнения фонового задания в несколько потоков?

Как получить прогресс выполнения фонового задания в несколько потоков?
Я
   Бешеный заяц
 
06.11.20 - 09:32
Собираюст массово грузить данные. планирую делать в несколько потоков,
Как в цикле запустить фоновые задания передав туда пареметры знаю, а вот как выводить текущее состояние (процент выполнения о каждом из них?) насколько помню в БСП можно выводить прогресс только по одному фоновому заданию так как параметром ожиданием является сам объект (форма)?
Уже думаю чтобы каждый поток генерировал свою HTML и писал текущее состояние... но это думаю не кошерно
   mistеr
 
1 - 06.11.20 - 09:35
Каждое задание пишет свой прогресс куда-нибудь в общедоступное место, например в РС, или в справочник типа СохраненныеНастройки.
Ты читаешь и вычисляешь общий прогресс.
   Dzenn
 
2 - 06.11.20 - 09:36
(1) присоединяюсь к идее. Просто выкидывай данные о прогрессе в общедоступное место, типа регистра сведений, например
   Бешеный заяц
 
3 - 06.11.20 - 09:44
(1) (2) это конечно вариант, но боюсь запись отнимает время, котя как вариант писать не все подряд а раз в 50 отераций цикла
   mistеr
 
4 - 06.11.20 - 10:15
(3) Конечно, только так. Даже не 50, а 100 или 1000, эквивалент нескольких секунд по времени.
Точность тут не нужна.
   H A D G E H O G s
 
5 - 06.11.20 - 10:40
Через ВременноеХранилище и подключенный обработчик ожидания
   Вафель
 
6 - 06.11.20 - 11:00
передавай не просто процент, а процент и номер потока
номер потока принимай как параметр самого потока
   Вафель
 
7 - 06.11.20 - 11:00
то бишь придется руками повторить тот код бсп.
но он не сложный
сообщить - получить сообщения
   fisher
 
8 - 06.11.20 - 11:25
(7) +1
БСП не использует лишние сущности. Фоновые просто выводят обычные сообщения, которые накапливаются в буфере вывода (т.к. их некому показывать), но которые можно вычитывать из основного потока. В принципе, через этот механизм можно реализовать асинхронное чтение почти любых данных из фонового задания.
   Вафель
 
9 - 06.11.20 - 11:28
(8) это офф. механизм общения между потоками.
Единственное, что сообщения доставляются негарантированно
   fisher
 
10 - 06.11.20 - 13:13
(9) "Офф." - в смысле, официальный? :)
Я бы сказал, что это случайная фича, просто пришедшаяся ко двору. И "узаконенная" фактом применения в типовых.
На человеческий механизм общения между потоками, особенно с учетом фичи негарантированной доставки, это даже в третьем приближении не тянет.
   H A D G E H O G s
 
11 - 06.11.20 - 13:19
(10) Это жертвы мертворожденного кластера 1С.
   Вафель
 
12 - 06.11.20 - 13:20
(10) ну раз в БСП применяют - значит официальный
   fisher
 
13 - 06.11.20 - 13:45
(12) Значит когда выпилят - станет неофициальный.
   fisher
 
14 - 06.11.20 - 13:49
(5) "Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания"
   ДенисЧ
 
15 - 06.11.20 - 13:51
(10) официальная тоже есть. Правда, за отдельные деньги.
   fisher
 
16 - 06.11.20 - 13:58
(15) Вот не начинай. Закрыть острую потребность в банальных серверных пушах через свистопердельный звездолет с постгрями и хезелкастами, где это составляет 0.01% возможностей - это издевательство над разработчиками.
   ДенисЧ
 
17 - 06.11.20 - 14:01
(16) Вроде они как-то оправдывались несделанием обратного вызова... Правда, не помню, чем...
   fisher
 
18 - 06.11.20 - 14:02
(17) Не, я могу придумать оправдания в том смысле, что это действительно не совсем тривиальная задача для общего случая. Но ответ Чемберлена все равно убивает.
   ДенисЧ
 
19 - 06.11.20 - 14:19
(18) Не знаю, что там говорил лорд Невилл по поводу 1с.. (
Неграмотен
   NWsFF
 
20 - 06.11.20 - 14:23
(0) "Не нужна вам такая машина пацаны" (С) Бумер 2
Но добавлю извращенных вариантов, используй "систему взаимодействия"
   fisher
 
21 - 06.11.20 - 14:23
"Чемберлену"
"наш ответ Чемберлену"
   stopa85
 
22 - 06.11.20 - 14:25
Есть ещё вариант.

Нужно загрузить 1000000 файлов.
Запускаешь 20 потоков, каждый грузит по 1000файло. Ожидаешь завершения потоков (одновременно все не завершатся). Один завершился, запускаешь ещё один, уведомляешь  % выполнения т.д.

Схема более совершенна (например можно регулировать количество потоков динамически, ничего никуда писать не нужно. Если словил деадлок можно перезапустить загрузку автоматом и т.д.) но сильно сложнее в реализации.


Список тем форума
Рекламное место пустует  Рекламное место пустует
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа.
Фредерик Брукс-младший
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.