From 10c012aba2473ce994216f551c04c4005cabbc4c Mon Sep 17 00:00:00 2001 From: Siarhei Siniak Date: Thu, 10 Jul 2025 11:53:08 +0300 Subject: [PATCH] [+] improve periodic processing --- .../tickers_retrieval/emcont.py | 33 +++++++++++++++---- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers_retrieval/emcont.py b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers_retrieval/emcont.py index c1221d4..fc5d720 100644 --- a/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers_retrieval/emcont.py +++ b/deps/test-task-2025-06-30-v1/python/online/fxreader/pr34/test_task_2025_06_30_v1/tickers_retrieval/emcont.py @@ -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