Изменение глобальной переменной внутри функции
Как глобально изменить переменную на время работы функции? Вот структура проекта:
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