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