Контекстные менеджеры в Python
Контекстные менеджеры — это красивый синтаксический сахар в python’e. Сегодня я это понял, набросав вот такой простенький менеджер:
@contextlib.contextmanager
def write_lock(model):
cursor = connection.cursor()
cursor.execute('LOCK TABLES %s WRITE' % model._meta.db_table)
yield
cursor.execute('UNLOCK TABLES')
И дальше немного приятной магии:
with write_lock(MyModel):
MyModel.objects.all().update(…)
Получается элегантное решение для выполнения каких-нибудь операций до и после блока кода.
На заметку: