Проблема с заморозкой цикла
Суть вопроса в следующем - функция 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 шт):
Если цикл должен продолжаться, вы можете использовать внутри 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()
Нужно следить за проблемами конкурентности. Например, продумать, что произойдет, если следующая таска запустится до завершения предыдущей.