Автоматическая пауза/возобновление при получении RESOURCE_EXHAUSTED
Описание
Тот же пример закачки свечей, но за более длительный период.
from tinkoff.invest import CandleInterval, Client
from tinkoff.invest.caching.cache_settings import MarketDataCacheSettings
from tinkoff.invest.services import MarketDataCache
from tinkoff.invest.utils import now
from pathlib import Path
with Client(TOKEN) as client:
settings = MarketDataCacheSettings(base_cache_dir=Path("tnkf_data_cache"))
market_data_cache = MarketDataCache(settings=settings, services=client)
for candle in market_data_cache.get_all_candles(
figi="BBG000B9XRY4", from_=now() - timedelta(days=365 * 10), interval=CandleInterval.CANDLE_INTERVAL_1_MIN,
):
print(candle)
Обрывается через 20 секунд на
C:\ProgramData\Anaconda3\lib\site-packages\tinkoff\invest\_errors.py in wrapper(*args, **kwargs)
26 f"{e.code().name} {e.details()}", # type:ignore
27 )
---> 28 raise RequestError(
29 e.code(), e.details(), metadata # type:ignore
30 ) from e
RequestError: (<StatusCode.RESOURCE_EXHAUSTED: (8, 'resource exhausted')>, '', Metadata(tracking_id=None, ratelimit_limit='300, 300;w=60', ratelimit_remaining=0, ratelimit_reset=25, message=None))
Без возможности возобновления.
Желаемое решение
Может, возможно сделать автоматическую паузу при получении RESOURCE_EXHAUSTED, вывод предупреждения, и автовозобновление, прямо в обработчике ошибок?
Дополнительно
Ещё в документации я нашёл точку доступа к годовым архивам, но, похоже, питоновской обёртки готовой под неё нет? Может, получится добавить её на будущее в план развития SDK.
Ещё в документации я нашёл точку доступа к годовым архивам, но, похоже, питоновской обёртки готовой под неё нет
уточните просто для информации - зачем обертка на питоне, если можно шелл запустить?
Ещё в документации я нашёл точку доступа к годовым архивам, но, похоже, питоновской обёртки готовой под неё нет
уточните просто для информации - зачем обертка на питоне, если можно шелл запустить?
Не у всех же Юникс. Многие на Win работают, да и могут нуждаться в более сложных сценариях обновления данных.
Предлагаю добавить в конфиг:
- флаг use_retry
- константу MAX_RETRY_ATTEMPT = 3
Энвой в заголовках ответа возвращает оставшееся количество запросов + время, через которое счетчик обнулится, подробнее о полях см на странице https://tinkoff.github.io/investAPI/grpc/#kreya
В случае получения RESOURCE_EXHAUSTED засыпать на время x-ratelimit-reset, возвращенное энвоем. Повторяем MAX_RETRY_ATTEMPT попыток.
Предлагаю добавить в конфиг:
- флаг use_retry
- константу MAX_RETRY_ATTEMPT = 3
Энвой в заголовках ответа возвращает оставшееся количество запросов + время, через которое счетчик обнулится, подробнее о полях см на странице https://tinkoff.github.io/investAPI/grpc/#kreya
В случае получения RESOURCE_EXHAUSTED засыпать на время x-ratelimit-reset, возвращенное энвоем. Повторяем MAX_RETRY_ATTEMPT попыток.
Если это получится сделать в рамках самого SDK, пользователям будет гораздо удобнее, я думаю. Надеюсь, об этом речь и шла )