@Toster_someone

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

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

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

Снизу код примерно того, что я хочу получить в результате
for i := 0; i < 5; i++ {
		go func() {
			req := vk.WallPost(/* params */)
			resp := <-req
			fmt.Println(resp.StatusCode)
		}()
	}
  • Вопрос задан
  • 247 просмотров
Пригласить эксперта
Ответы на вопрос 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(), так как это блокирующая операция. Нужно использовать контексты или таймеры
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы