@Alex_888

Приостановить выполнение цикла одной функции из другой?

Есть две асинхронные функции, в обед циклы while True.
1 функция читает из базы переменную в цикле каждые 5 минут и далее с ней работает.
2 функция меняет эту переменную и записывает в базу каждые 2 минуты
Есть вероятность что 1 функция получит переменную а вторая изменит ее до того как закончится цикл в первой
вопрос как можно приостановить цикл во второй функции пока не выполнится цикл в первой

async def fun_1():
    while True:
        sql = "SELECT variable FROM table_variable WHERE ids = '1'"
        variable_X = cursor.execute(sql).fetchall()[0][0]
        variable_Y = variable_X + variable_Z
        await asyncio.sleep(5)
        variable_W = variable_X + variable_Z
        await asyncio.sleep(5)
        variable_F = variable_X + variable_Z
    await asyncio.sleep(300)
    
async def fun_2():
    while True:        
        variable_X = # Some code 
        # ЗАПИСЬ В ТАБЛИЦУ table_variable
    await asyncio.sleep(180)
  • Вопрос задан
  • 64 просмотра
Пригласить эксперта
Ответы на вопрос 1
@bacon
Тут всё плохо.
1. перестать использовать глобальные переменные
2. какой смысл использовать async, когда работа с БД блокирующая?

А так, конечно есть мютекс в виде asyncio.Lock, но блин, этот код пример, как всё сделать неправильно.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы