Изменение глобальной переменной внутри функции

Как глобально изменить переменную на время работы функции? Вот структура проекта:

Project:
-Main
-Filters
-Admins:
--Admin_coms

В файле Main у меня объявлена глобальная переменная is_bot_locked = False

В файле Admin_coms есть декоратор с функцией:

@rAdmin.callback_query(F.data == 'redis_clean')
async def redis_clean(call: CallbackQuery):
    global is_bot_locked
    is_bot_locked = True
    try:
        await asyncio.sleep(10)
        (...)
    except Exception as e:
        print(f"Error redis_clean: {e}")
    finally:
        # Снять блокировку
        is_bot_locked = False

При активации функции происходит симуляция работы, и пока функция работает (в данном случае спит), глобально is_bot_locked должно быть True, однако при обращении к данной функции из файла Filters оказывается, что переменная False.

Как исправить проблему?


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

Автор решения: Noskill

у вас этот блок работает(отрабатывает всегда) потому как юзаете глобальные переменные в корутинах

finally:
        # Снять блокировку
        is_bot_locked = False

есть много вариантов исправления. начните с самого простого

import asyncio

lock = asyncio.Lock()
is_bot_locked = False

@rAdmin.callback_query(F.data == 'redis_clean')
async def redis_clean(call: CallbackQuery):
    async with lock:
        global is_bot_locked
        is_bot_locked = True
    try:
        await asyncio.sleep(10)
        # что-то тут творится
    except Exception as e:
        print(f"Error redis_clean: {e}")
    finally:
        async with lock:
            is_bot_locked = False
→ Ссылка