@Toster_someone

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

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

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

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

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

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