[+] improve periodic processing
This commit is contained in:
parent
52df4b54d5
commit
10c012aba2
33
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers_retrieval/emcont.py
vendored
33
deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers_retrieval/emcont.py
vendored
@ -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():
|
||||||
next_retrieval - datetime.datetime.now()
|
return (
|
||||||
).total_seconds()
|
next_retrieval - datetime.datetime.now()
|
||||||
|
).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
|
||||||
|
Loading…
Reference in New Issue
Block a user