Проблема с заморозкой цикла

Суть вопроса в следующем - функция main постоянно проверяет базу данных на предмет изменения значений. Далее при определённом условии должна запускать функцию logic. Она её запускает, но в тот же момент идёт заморозка цикла while true. Как сделать игнорирование await и при выполнении условия не замораживать цикл, а запустить функцию и дальше проверять бд по циклу?

P.S. Функция logic обязательно должна быть async, т.к. там используется pyrogram

     async def main():
        logger.info('')
        dbase.until_start_bot()
        in_process = list()
        while True:
            result = dbase.search_in_queue()
            if result is not None:
                ignoring_flag = False
                for res in in_process:
                    if res == result[1]:
                        ignoring_flag = True
    
                if not ignoring_flag:
                    in_process.append(result[1])
                    await logic(result)
                else:
                    pass

    async def logic(result):
         """Continue"""
        pass

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

Автор решения: Vladislav Pavkin

Если цикл должен продолжаться, вы можете использовать внутри logic() бэкграунд-задачу. Как пример, запустить в отдельном треде:

from threading import Thread

def some_func(in_process):
    ...
    # в конце удалить результат из in_process

async def logic(in_process):
    t = Thread(target=some_func, args=[in_process])
    t.start()

Нужно следить за проблемами конкурентности. Например, продумать, что произойдет, если следующая таска запустится до завершения предыдущей.

→ Ссылка