Anonymous
впска поймала файл
Anonymous
значит, макбук не хочет работать)
Anonymous
так, сделал все шаги на маке и все равно та же картина
Anonymous
Хм, к сожалению, маков у меня нет, мб что-то ОС специфичное
Anonymous
ладно, пойду интернеты курить) спасибо за правильную наводку!
Dmitriy / დიმიტრი
Какие есть способы контролировать кол-во горутин? Допустим мне надо, что бы работало максимум 10 для одной задачи. Сейчас у меня вот такая конструкция: goroutines := make(chan struct{}, 10) for _, path := range routes { goroutines <- struct{}{} go func(path) { wg.Add(1) // ... <-goroutines wg.Done() }(path) } Т.е. если буферивизованный канал полностью забит, то работает 10 горутин, как только горутина завершает работу она читает из канала и освобождает место в нем
Dmitriy / დიმიტრი
Может я велосипед изобрел? Может в Go есть какие-то уже механизмы для этого?
Anonymous
Может я велосипед изобрел? Может в Go есть какие-то уже механизмы для этого?
Через цикл for запускайте нужно количество и wg.Wait() ждет их завершение, дальше ещё 10-ок запускается и т.д.
Anonymous
У кого есть книга го в примерах на русском поделитесь please?
Anonymous
Так это самый простой и самый действенный вариант.
// someFunc project main.go package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup for { for n := 1; n <= 10; n++ { wg.Add(1) go someFunc(n, &wg) } wg.Wait() break } } func someFunc(numb int, wg *sync.WaitGroup) { fmt.Println("Number:", numb) wg.Done() }
Anonymous
// someFunc project main.go package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup for { for n := 1; n <= 10; n++ { wg.Add(1) go someFunc(n, &wg) } wg.Wait() break } } func someFunc(numb int, wg *sync.WaitGroup) { fmt.Println("Number:", numb) wg.Done() }
Мне на понравился вариант. Надо запускать по одной горутине, как только одна из предыдущих завершится. А тут получается, что пока первые 10 не закончатся, новые не будут запускаться.
Anonymous
В том же цикле
Dmitriy / დიმიტრი
// someFunc project main.go package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup for { for n := 1; n <= 10; n++ { wg.Add(1) go someFunc(n, &wg) } wg.Wait() break } } func someFunc(numb int, wg *sync.WaitGroup) { fmt.Println("Number:", numb) wg.Done() }
Не подходит для задачи. Лишние горутины. Надо создавать по мере необходимости и контролировать что бы их не было больше 10, а не ровно 10
Anonymous
Задача была запустить 10 горутин, дождаться и запустить след. 10
Anonymous
И как же вы это контролить собрались? )
Anonymous
Задача была запустить 10 горутин, дождаться и запустить след. 10
Я понял, что должно МАКСИМУМ одновременно 10 горутин работать, а не по 10 штук запускать ))
Dmitriy / დიმიტრი
И как же вы это контролить собрались? )
Ну у меня это сделано через канал(см. код выше), но я не уверен что это верный способ. Т.е. возможно для таких вещей есть уже готовое решение в Go о котором я не знаю
Dmitriy / დიმიტრი
Ну тогда так и оставлю. Хотя может ещё на стэке попозже вопрос задам. Интересно что там ответят
Oleg
я делал так, но тут получается довольно неточное число горутин, которые заняты непосредственно задачей, т.к. есть ещё 1-3 служебных. мне такое решение подошло. for cn := 0; cn < listsize; cn++ { wg.Add(1) go fill(cn) for runtime.NumGoroutine() > 10 { time.Sleep(time.Microsecond * 100) } } wg.Wait()
Oleg
запускает новую задачу, как только число горутин падает ниже 10
Anonymous
запускает новую задачу, как только число горутин падает ниже 10
Ток ещё нужно задачи завершать wg.Done() но я думаю это опечатка.
Oleg
Это делается в fill()
Oleg
wg определён глобально
Oleg
Зря
wc -l src/main.go 104
Oleg
я думаю похрен :)
Мерль
Не подходит для задачи. Лишние горутины. Надо создавать по мере необходимости и контролировать что бы их не было больше 10, а не ровно 10
Можно создать канал замыканий и функцию, которая создаёт N горутин и передаёт им context и канал замыканий Посылая замыкания с нужной логикой в канал, ты гарантировано получаешь не больше N работающих в данный момент воркеров
Anonymous
ссылка https://blog.golang.org/pipelines никогда не потеряет актуальность
Мерль
https://groups.google.com/forum/#!topic/golang-nuts/AvJ6FHZCiYQ
Anatoly
>The new go env -json flag enables JSON output, instead of the default OS-specific output format.
Anatoly
крутота
Stanislav
мне больше понравилась параллельная конпеляция
Anatoly
>By popular request, ./... no longer matches packages in vendor directories in tools accepting package names, such as go test.
Stanislav
возможно therecipe/qt будет быстрее конпеляться
Anatoly
Да вообще такой хороший релиз, такое ощущение что перед го2 прибираются: https://tip.golang.org/doc/go1.9
Мерль
[last news] Go AntiPatterns
Rafael
вакансии по голангу сюда можно?
Мерль
Можно
Мерль
Желательно с вилкой
Rafael
Почасовая 500-800р час. Удаленная. Задачи бэкенд для crm транспортной компании
Anton
Почасовая 500-800р час. Удаленная. Задачи бэкенд для crm транспортной компании
мне кажется с такой вилкой и задачей проще пыхеров найти
Peter
Совсем зажрались в столицах
Valentin
800+ минимум должно быть в час
Valentin
Они за еду пашут
Valentin
Хотя 500 в час это и есть за еду
Anton
Совсем зажрались в столицах
зажрались? :) прикинь ценник, если месяц на проекте будешь работать по 8ч в день а потом по честному пойдешь и заплатишь налог а работать ты будешь без отпускных и социалочек..
Anton
Пыхеры уже за 500 рублей пашут?
а я хз если честно.. это много или мало для пыхеров?
Default
Совсем зажрались в столицах
Это удаленка, на удаленку цены одинаковые по всей России
Kirill
Ну, я думал, дно уже ими найдено
Default
Вне зависимости от того, в Биробиджане ты или в Мск
Peter
Если 500р, то с налогом в месяц 69600р
Default
Так что не зажрались в столицах, а зажрались во фронтэндах ☝🏻
Kirill
это много? :)
Ну, если не есть и жить в палатке возле МКАДа
Anonymous
Пыхеры уже за 500 рублей пашут?
Я брал 800 когда халтурил
Default
Тьфу
Anton
Я брал 800 когда халтурил
тогда доллар в 2 раза дешевле был?
Default
Не в том чате нахожусь :D
Anonymous
800+ минимум должно быть в час
Ну вот да, но хитрожопые манагеры за тебя три шкуры сдерут за эти деньги. Правда когда я брал халтуру это было еще до кризиса, мб сейчас прогеры обленились и цены поднялись
Anton
Ну, если не есть и жить в палатке возле МКАДа
правильно будет: если не жить и есть в палатке возле МКАДа..
Peter
Тоже нужно начать из дома работать
Anton
не, может конечно я так категоричен, потому что я уже давно не голодный студент.. студенты наверное и за 300р/час будут готовы фигачить?
Anton
слышал что в Туле средняя зп 15 тыр/мес
Peter
Зато у них пряники и самовары
Kirill
Которыми выдаётся зарплата
Andrew
хорошо, что не оружием