@Toster_someone

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

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

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

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

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

Похожие вопросы
17 нояб. 2024, в 18:45
1500 руб./за проект
17 нояб. 2024, в 18:39
100000 руб./за проект
17 нояб. 2024, в 18:29
15000 руб./за проект