Запуск асинхронной функции при других длительных работающих асинхронных функциях

Есть две асинхронные функции, которые периодически выполняются (каждые 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())


Ответы (1 шт):

Автор решения: Сергей Ш
import asyncio

async def bla():
    while True:
        print('bla')
        await asyncio.sleep(1)

async def func_1():
    while True:
        print('func_1')
        await asyncio.sleep(4)
        result('result_of_func_1')

async def func_2():
    while True:
        print('func_2')
        await asyncio.sleep(8)
        result('result_of_func_2')

def result(data):
    print(data)

async def main():
    await asyncio.gather(bla(), func_1(), func_2())

asyncio.run(maim())
→ Ссылка