Статическое время между повторами в urllib3Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Статическое время между повторами в urllib3

Сообщение Anonymous »

Я хочу использовать статическое время между повторами вместо экспоненциального коэффициента задержки в классе Retry urllib3.
Я попробовал обернуть класс Retry для реализации статической повторной попытки. Однако, хотя экземпляр LoggingRetry создается с правильными параметрами, при фактической повторной попытке используются значения по умолчанию. В приведенном ниже примере между повторными попытками должно пройти две секунды. Коэффициент backoff_factor сохранится, но мне не удается добиться того, чтобы параметр Delay_between_retries придерживался.
Спасибо.
import time
import urllib3
from urllib3.util.retry import Retry
from urllib3.exceptions import MaxRetryError
from requests. exceptions import HTTPError
import traceback

# Define the retry strategy with logging
class LoggingRetry(Retry):
def __init__(self, delay_between_retries=0, *args, **kwargs):
print(f"Initializing LoggingRetry with delay_between_retries={delay_between_retries}")
self.delay_between_retries = delay_between_retries
super().__init__(*args, **kwargs)

def sleep(self, response=None):
backoff = self.get_backoff_time()
total_sleep_time = self.delay_between_retries + backoff
print(f"LoggingRetry sleep - delay_between_retries: {self.delay_between_retries}, Backoff time: {backoff}")

time.sleep(total_sleep_time)

class MyClient:
def __init__(self, total_tries=3, delay_between_retries=0, backoff_factor=0):
self.total_tries = total_tries
self.delay_between_retries = delay_between_retries
self.backoff_factor = backoff_factor

# Define a retry strategy with a custom fixed_wait_time
self.retry_strategy = LoggingRetry(
total=self.total_tries,
status_forcelist=[202],
backoff_factor=self.backoff_factor,
delay_between_retries=self.delay_between_retries,
raise_on_status=False,
allowed_methods=frozenset(['POST'])
)

# Initialize HTTP client with retry strategy
self.http = urllib3.PoolManager(retries=self.retry_strategy, maxsize=4, block=True)

def request_data(self, url):
try:
response = self.http.request('GET', url,)
return response
except MaxRetryError as me:
print(f"Max retries reached: {me}")
except HTTPError as he:
print(f"An HTTP error occurred: {he}")
traceback.print_exc()
except Exception as e:
print(f"An error occurred: {e}")
traceback.print_exc()

MyClient(delay_between_retries=2, backoff_factor=0).request_data(url='http://0.0.0.202/')


Подробнее здесь: https://stackoverflow.com/questions/788 ... in-urllib3
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Статическое время между повторами в urllib3
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Статическое свойство или статическое поле Readonly
    Anonymous » » в форуме C#
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Перестановки с повторами, алгоритм с рекурсией
    Anonymous » » в форуме C#
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Elasticsearch-py добавить задержку между повторами
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Elasticsearch-py добавить задержку между повторами
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»