Задать вопрос
@Toster_someone

Как поставить задержку во время выполнения горутин?

Привет, возник вопрос, как можно ограничить "скорость выполнения горутин", понимаю, что это противоречит смыслу горутин, но возникла такая необходимость.

Предположим я хочу отправить несколько api запросов в вк, и получить ответ для обработки. Но при использовании горутин я не знаю как можно не нарушить ограничение на 3 запроса в секунду.

Снизу код примерно того, что я хочу получить в результате
for i := 0; i < 5; i++ {
		go func() {
			req := vk.WallPost(/* params */)
			resp := <-req
			fmt.Println(resp.StatusCode)
		}()
	}
  • Вопрос задан
  • 289 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
yellow79
@yellow79
Senior Software Engineer
Для таких целей есть https://pkg.go.dev/golang.org/x/time/rate
Ответ написан
Комментировать
samodum
@samodum
Какой вопрос - такой и ответ
Отправляй запросы только тогда, когда время от предыдущего запроса больше 1/3 сек
Ответ написан
Комментировать
@Alexandre
У меня была похожая задача с апи Яндекса, я не использовал горутины, и задержку ставил используя time.Sleep(). Там было ограничение на 30 запросов в мин - это 1 запрос в 2 сек. Так что поставил задержку в 2 сек.
Использование горутин оправдано, когда хочешь получить информацию сразу из нескольких источников. Или одна горутина получает информацию и отдает её на обработку другой горутине ... Тогда в этом случае нельзя использовать time.Sleep(), так как это блокирующая операция. Нужно использовать контексты или таймеры
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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