170 похожих чатов

Всем доброго времени суток, извиняюсь за вероятно глупый вопрос. Но

как получить кол-во ожидающих данных в канале?

8 ответов

12 просмотров

а для какой цели? мне просто интересно зачем это вообще может понадобиться

Леoнид- Автор вопроса
d. one-man
а для какой цели? мне просто интересно зачем это в...

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

Леoнид
Менеджер обрабатывает пулл сообщений, но пока что ...

А не проще просто закрыть канал в этом случае? Быстрое, но не очень хорошее решение: Закрываешь канал на отправителе, на приёмнике из for range получается выход после обработки всех сообщений. Значит можно отправить сигнал что все джобы окончены, или же просто упасть по таймеру. Если делать лучше: ВО - внутренний объект/сущность, который работу работает (ну или является обёрткой типа usecase, не важно). -Массив каналов для передачи всем ВО команды graceful shutdown. В каждом ВО свой канал для выключения. -Массив каналов для получения информации о завершении работы каждого ВО. -Канал с сигналом что проге пора безусловно завершаться. -Везде где можно стараться делать таймеры на отключения по таймауту, а не только в "родителе" который управляет сигналами. -При получении сигнала завершения - пробежать по массиву каналов отключения ВО и послать им сигналы собственно отключения. -Во всех ВО сначале идёт select, чтобы понять надо новую джобу брать, или выключаться. -Если пора выключаться, а в очереди ждёт пачка джобов - пробежаться по ним и зафиксировать (залогировать?) что они отменены (а не выполнять). Далее отправить сигнал о завершении ВО. Ну или просто забить как в простом примере выше, но так делать не очень хорошо. -В случае когда не из всех каналов получен результат что ВО перестал работать - сработает основной таймер, который и отправит сигнал безусловного завершения. Надо фисировать все ВО что не завершились успешно, чтобы потом понимать куда начать копать в дебаге. -Если все команды отключения ВО завершились, то само собой что сигнал завершения раньше отправится.

Леoнид- Автор вопроса
Ivan Tihonov
А не проще просто закрыть канал в этом случае? Быс...

Хехе, не уверен что я на столько готов помучаться ради этого, но поразмышлять определенно стоит...

Леoнид
Менеджер обрабатывает пулл сообщений, но пока что ...

Для такого можно закрыть канал, после чего подождать sync.WaitGroup.Wait — по сути эта штука как раз для такого и предназначена

Леoнид- Автор вопроса
Мерль
Для такого можно закрыть канал, после чего подожда...

Так я в целом и не хотел канал закрывать) Просто хотел узнать, сколько там работы. Просто если там тысяча+ тасков, нет смысла останавливать, так как там параллельно постоянные задачи работают, и отрубать всё пользователям пока не дообработаются эти, нельзя)

Мерль
Для такого можно закрыть канал, после чего подожда...

Мне WaitGroup не нравится в этом случае, т.к. прога может висеть неопределённо долго. Зависит от задачи: надо безусловно завершить рассылку, или можно забить

Леoнид- Автор вопроса
Ivan Tihonov
Мне WaitGroup не нравится в этом случае, т.к. прог...

Да я думаю что буду просто все задачи в бд записывать, и при поднятии сервиса снова запихивать в канал

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта