[+] 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,
request_timeout: float | int = 0.5,
store_timeout: float | int = 0.5,
request_period: float | int = 1,
) -> None:
last_retrieval = datetime.datetime.now()
assert request_timeout >= 0
assert store_timeout >= 0
request_period_timedelta = datetime.timedelta(
seconds=request_timeout
)
while True:
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:
@ -127,13 +132,27 @@ class Emcont:
except:
logger.exception('')
next_retrieval = last_retrieval + datetime.timedelta(seconds=1)
next_retrieval = last_retrieval
wait_interval = (
next_retrieval - datetime.datetime.now()
).total_seconds()
def wait_interval():
return (
next_retrieval - datetime.datetime.now()
).total_seconds()
if wait_interval > 0:
await asyncio.sleep(wait_interval)
while True:
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