有两个异步函数定期运行(分别每 4 小时和 8 小时),而另一个函数每分钟运行一次。问题:如何在长时间运行的进程处于睡眠状态时每分钟运行一个函数?
import asyncio
import datetime
from loguru import logger
async def bla():
'''
должна работать каждую минуту
'''
now_time = datetime.datetime.now()
now_time_new = now_time.strftime('%H:%M:%S')
logger.debug(f'start bla : {now_time_new}')
await asyncio.sleep(1) # типо засыпаем на 1 minute
now_time = datetime.datetime.now()
now_time_new = now_time.strftime('%H:%M:%S')
logger.info(f'end bla : {now_time_new}')
async def func_1():
'''
включается условно на 4 часа
'''
now_time = datetime.datetime.now()
now_time_new = now_time.strftime('%H:%M:%S')
logger.info(f'start func_1 : {now_time_new}')
await asyncio.sleep(4) # типо засыпаем на 4 Hours
now_time = datetime.datetime.now()
now_time_new = now_time.strftime('%H:%M:%S')
logger.info(f'end func_1 : {now_time_new}')
return 'result_of_func_1'
async def func_2():
'''
включается условно на 8 часа
'''
now_time = datetime.datetime.now()
now_time_new = now_time.strftime('%H:%M:%S')
logger.info(f'start func_2 : {now_time_new}')
await asyncio.sleep(8) # типо засыпаем на 8 Hours
now_time = datetime.datetime.now()
now_time_new = now_time.strftime('%H:%M:%S')
logger.info(f'end func_2 : {now_time_new}')
return 'result_of_func_2'
async def main():
while True:
task_1 = asyncio.create_task(func_1())
task_2 = asyncio.create_task(func_2())
# asyncio.create_task(bla()) # должна включатся каждую минуту пока условно другие
# функции засыпают на более длительный срок !!! +
res_of_func_1 = await task_1 # выводит результат каждые 4 часа
res_of_func_2 = await task_2 # выводит результат каждые 8 часа
logger.warning(f'{res_of_func_1}, {res_of_func_2}\n')
await asyncio.sleep(1)
if __name__ == "__main__":
result = asyncio.run(main())