У меня есть скрипт, который отправляет 5-10 запросов в секунду на сервер. Самое важное требование, которое у меня есть, - это ограничение количества запросов в секунду. Это всегда должна быть конкретная цифра, не больше и не меньше. Для этого я отправляю запросы через определенный промежуток времени (минус время, необходимое для отправки предыдущего запроса).
Проблема: некоторые запросы отправляются достаточно быстро, а другие занимают слишком много времени на шаге sock.sendall (). Я полагаю, что это потому, что буфер отправки заполнен, и выполнение блокируется, пока буфер не будет очищен.
Что я могу сделать, чтобы очистить буфер быстрее?
Один из вариантов, которые я попробовал, - отключить Nagle:
sock.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
но, похоже, это не улучшило ситуацию.
Еще одна опция, которая даже звучит слишком неправильно, чтобы попытаться сделать это, - установить буфер отправки на длину запроса перед каждым вызовом sendall ().
Что я могу сделать, чтобы получать более предсказуемые запросы в секунду?
Еще один вариант, о котором я только что подумал: иметь несколько процессов, которые будут выполнять небольшое количество запросов в секунду каждый, надеюсь, это сделает результаты более предсказуемыми.
ОС - это Centos.
Обновление: похоже, моя ошибка в настройке параметров сокета после подключения. Похоже, размер буфера может быть установлен только перед вызовом connect (). То же самое с TCP_NODELAY. Еще не было времени проверить, имеет ли это какое-то значение.