[+] improve periodic processing

This commit is contained in:
Siarhei Siniak 2025-07-10 11:53:08 +03:00
parent 52df4b54d5
commit 10c012aba2

@ -94,16 +94,21 @@ class Emcont:
only_symbols: Optional[set[str]] = None, only_symbols: Optional[set[str]] = None,
request_timeout: float | int = 0.5, request_timeout: float | int = 0.5,
store_timeout: float | int = 0.5, store_timeout: float | int = 0.5,
request_period: float | int = 1,
) -> None: ) -> None:
last_retrieval = datetime.datetime.now() last_retrieval = datetime.datetime.now()
assert request_timeout >= 0 assert request_timeout >= 0
assert store_timeout >= 0 assert store_timeout >= 0
request_period_timedelta = datetime.timedelta(
seconds=request_timeout
)
while True: while True:
logger.info(dict(msg='started')) logger.info(dict(msg='started'))
entries : Optional[cls.rates_get_t.data_t] = None entries : Optional['Emcont.rates_get_t.data_t'] = None
try: try:
try: try:
@ -127,13 +132,27 @@ class Emcont:
except: except:
logger.exception('') logger.exception('')
next_retrieval = last_retrieval + datetime.timedelta(seconds=1) next_retrieval = last_retrieval
wait_interval = ( def wait_interval():
return (
next_retrieval - datetime.datetime.now() next_retrieval - datetime.datetime.now()
).total_seconds() ).total_seconds()
if wait_interval > 0: while True:
await asyncio.sleep(wait_interval) next_retrieval += request_period_timedelta
if (
wait_interval() > 0 or
wait_interval() > request_period_timedelta.total_seconds() / 4
):
break
else:
logger.warning(dict(
msg='skip period due to huge lag',
))
if wait_interval() > 0:
await asyncio.sleep(wait_interval())
last_retrieval = next_retrieval last_retrieval = next_retrieval