Артем
но можно ли там посылать сигнал на отключения конкретным горутинам
Артем
или как-то выдавать горутинам айдишник
Артем
хм
Артем
а можно же через канал засунуть мапу
Артем
и чтобы все горутины генерили айдишники и хранили у себя свой айдишник и записывали айдишник в мапе
Артем
и сверяли состояние через булево значение
Артем
типо 12312312: true
Артем
я хочу чтобы мейн поток мог вырубать любые горутины
Артем
посылая сигналы
Артем
потому что горутины могут работать с обьектами в базе, которые могут быть не активны
Артем
статус у них будет не активный
Артем
а горутина до сих пор будет обрабатывать данные этого обьекта в бд
Артем
хотя не должна этого делать
Артем
можно сделать чтобы горутина каждую итерацию проверяла активный ли обьект с которым она работает
Артем
но хз на сколько это правильно
Anonymous
Артем
потому что я просто строю на этом архитектуру - не хочу чтобы потом другие прогеры страдали
Артем
или тем более страдал я
Alexander
Ну смотри, есть контекст, его можно прерывать, передавать во многие функции для работы с базой и прочим общением. Для твоих внутренних функций тебе нужно будет вставлять нечто вроде:
select{
case <- ctx.Done():
//тут выходим
default:
}
Alexander
Иначе всё по процессам
Alexander
Артем
ну да, просто одно поле в бд посмотреть
Артем
тогда еще вопрос по архитектуре - стоит сделать постоянный клиент для каждой горутины к бд или подключаться к бд - делать какие-то действия и дисконнектиться?
Alexander
Как-то отслеживать конкретные горутины, каталогизировать их не надо
Артем
у меня носкл
Артем
mongodb
Alexander
Не важно
Alexander
Обычно концепция такая
Артем
я просто к чему
Archee
Артем
я работаю через mongo_driver
Артем
и там нужно обязательно отрубаться
Артем
ибо если не отрубить клиент после проедланных действий, то клиенты будут копиться
Артем
можно самому прописать горутину которая будет проверять работу клиентов и отрубать неактивные
Артем
но как по мне легче отрубать после проделанных действий
Артем
я просто написал функции find insertOne Update и тд где как раз внутреняя монго драйвер
Maks
Артем
и там как раз клиент подключается делает какие либо действия и отрубается отрубается
Артем
это правильное решение?
Артем
с точки зрения архитектуры
Артем
допустим нам надо посмотреть какую то коллекцию в монге - мы открываем клиент - смотрим - отрубаемся
Артем
и так на каждый запрос
Alexander
mongodb
Хм, с редисом так работает. Ща посмотрим по монге
Артем
ну вот у меня на проде
Артем
я не отключал клиента
Артем
у меня был простой скрипт который осматривал коллекцию
Артем
и чистил ее если она достигала какого до колличества
Артем
и вот через неделю там было 29к подключенных клиентов
Alexander
Артем
через docker start глянул и там в pid было как раз 29
Артем
и они множились
Alexander
Артем
постепенно но множились
Артем
а когда прописал дисконект после просмотра документа и презагрузил дб
Alexander
Артем
то все заработало
Артем
да
Артем
теперь я всегда пишу дисконнект
Артем
впизду после питона предостерегаю себя как могу
Артем
ну просто иначе я не нашел способа
Артем
ну либо брать клиент и запихивать его в горутину
Артем
и отрубать клиент после проделанных действий и остановки горутины
Артем
можно ли еще обьявить клиент при создании горутины
Артем
и вызывать его из других частей кода
Артем
?
Артем
@edwvee вообщем если есть идеи, то я готов выслушать, просто к сожалению нашел только это решение
Alexander
хм, может Client у драйвера монги тред сейф
Alexander
надо посмотреть
Alexander
https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo/options?utm_source=godoc
Alexander
Alexander
помойму это намекает, что ты можешь один клиент создать, задав ему ограничения по кол-ву коннектов и юзать как хочешь из разных горутин
Alexander
ну это совсем глупо с долгоживущим многопоточным процессом тратить миллисекунды на подключение-отключение
Alexander
https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo#Client
Alexander
Client is a handle representing a pool of connections to a MongoDB deployment. It is safe for concurrent use by multiple goroutines.
Alexander
все клево, гоувейно
Alexander
и в реальности после такого перехода даже пула с одним коннектом бывает достаточно
Артем
о
Артем
супер
Артем
спасибо, помог