Size: a a a

2020 April 02

VM

Vladislav Milenin in Go-go!
если вы остановите все горутины будет дедлок
источник

X

Xo in Go-go!
ну типа делаю запросы по http, вылезает too many connections, хочу сделать паузу на 5-10секунд
источник

Z

Zver in Go-go!
Xo
с помощью чего можно поставить на паузу все горутины?
Если все сядут на канал в ожидании.
источник

X

Xo in Go-go!
вот тоже думаю о канале только
источник

Z

Zver in Go-go!
Xo
ну типа делаю запросы по http, вылезает too many connections, хочу сделать паузу на 5-10секунд
Ограничивайте просто количество запросов.
источник

АП

Андрей Привалов in Go-go!
Xo
ну типа делаю запросы по http, вылезает too many connections, хочу сделать паузу на 5-10секунд
Есть какой-то "менджер" коотрый запускает горутины на приходящий реквест. И задача сводится к тому, что он должен узнать об этой ошибке и приостановить запуск новых горутин
источник

АП

Андрей Привалов in Go-go!
То есть, надо выделить такую "надзоную" сущность,
источник

X

Xo in Go-go!
думал может попроще есть вариант, типа вызвать лок  sync.Mutex и после него time.Sleep
источник

АП

Андрей Привалов in Go-go!
Вам ведь не надо стопать Все горутины. задача не правильно подана
источник

АП

Андрей Привалов in Go-go!
Xo
думал может попроще есть вариант, типа вызвать лок  sync.Mutex и после него time.Sleep
А по этой фразе вообще не понятно, о чем речь)
источник

АП

Андрей Привалов in Go-go!
Да и само понятие "стоп горутины" - требует уточнения
источник

АП

Андрей Привалов in Go-go!
Либо поставить на паузу какой-то цикл внутри, либо постараться выйти из горутины как можно раньше и чтобы она прибилась
источник

АП

Андрей Привалов in Go-go!
Это все зависит от конкретной вашей задачи.
источник

Z

Zver in Go-go!
Xo
думал может попроще есть вариант, типа вызвать лок  sync.Mutex и после него time.Sleep
Это ерунда. Делайте канал с ограничением

// remoteDeleteEmployeeRPC will delete an employee over the network.
func remoteDeleteEmployeeRPC() {
   ...
}
// sem is a channel that will allow up to 10 concurrent operations.
var sem = make(chan int, 10)
func main() {
  for _, employee := range employeeList {
      sem <- 1
      go func(){
          remoteDeleteEmployeeRPC(employee.ID)
          <-sem
      }()
  }
}


Или используйте golang.org/x/sync/semaphore
источник

Z

Zver in Go-go!
Или создавайте ограниченный пул горутин. В которые будете отдавать задания через канал.
источник

X

Xo in Go-go!
есть waitgroup размером 16 горутин, каждая горутина делает http запрос,  бывает в одной из горутин результат too many connections, я хочу сделать так, когда одна горутина получает такой результат - ставятся на паузу все горутины (либо горутина блокировала процесс появления новых горутин и спала (time.sleep) несколько секунд например)
источник

DP

Daniel Podolsky in Go-go!
А не используйте пул, и проблема сама решится
источник

АП

Андрей Привалов in Go-go!
"ставятся на паузу все горутины" - это неконкретная фраза то. расшифруйте ее для себя, и станет понятнее
источник

Z

Zver in Go-go!
Странно для 16 потоков упираться в количество соединений.
источник

X

Xo in Go-go!
согласен, и в 4 потока такой же результат, но дело не в этом
источник