Курс Python → Синхронизация доступа к ресурсам

Модуль asyncio.Lock представляет собой инструмент синхронизации доступа к общим ресурсам в асинхронном коде на Python. Он позволяет предотвратить конфликты при одновременном доступе к общей переменной из нескольких асинхронных задач. При использовании asyncio.Lock каждая задача может пытаться захватить блокировку перед выполнением операции, и только одна задача сможет в конечном итоге захватить блокировку и выполнить операцию, в то время как другие задачи будут ожидать освобождения блокировки.

Пример использования asyncio.Lock может выглядеть следующим образом:


import asyncio

counter = 0
lock = asyncio.Lock()

async def update_counter():
    global counter
    async with lock:
        counter += 1
        print(f'Counter value: {counter}')

async def main():
    tasks = [update_counter() for _ in range(5)]
    await asyncio.gather(*tasks)

asyncio.run(main())

В этом примере мы создаем общую переменную `counter` и объект `lock` из модуля asyncio.Lock. Затем определяем асинхронную функцию `update_counter`, которая увеличивает значение счетчика на 1 при захвате блокировки. В функции `main` мы создаем 5 задач `update_counter` и запускаем их с помощью `asyncio.gather()`, чтобы они выполнялись параллельно, но с синхронизацией доступа к общей переменной.

При выполнении этого кода каждая задача `update_counter` будет пытаться захватить блокировку, и только одна задача сможет это сделать одновременно. Остальные задачи будут ждать освобождения блокировки и затем продолжат выполнение. Таким образом, мы предотвращаем конфликты при доступе к общему ресурсу и обеспечиваем безопасность операций над ним в асинхронном коде.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Хранение данных
  2. Основные функции и модули Python
  3. Многострочные комментарии в Python
  4. Работа с парами ключ-значение
  5. Оператор == в Python
  6. Встроенные функции Python
  7. Получение текущей даты и времени с помощью datetime
  8. Измерение времени выполнения кода с помощью time
  9. Именованные кортежи в Python
  10. Декораторы в Python
  11. Модуль xkcd: загрузка комиксов
  12. Управление памятью в Python
  13. Переопределение оператора % для объектов
  14. Асинхронное программирование с asyncio
  15. Оператор «or» в Python
  16. Вывод с переменной через запятую
  17. Просмотр файла в Jupyter Noteboo
  18. Перезагрузка оператора в Python
  19. Поиск простых чисел
  20. Экспорт данных с помощью writefile
  21. OrderedDict — упорядоченный словарь
  22. Генераторы в Python
  23. Импортирование в Python
  24. Функция print() — вывод информации
  25. Удаление дубликатов из списка
  26. Декораторы в Python
  27. Работа с defaultdictами в Python
  28. Функция __init__ в Python
  29. Функции-генераторы в Python
  30. Создание GUI с Tkinter: Entry
  31. Генераторы в Python
  32. Открытие и запись файлов
  33. Методы сравнения множеств
  34. Python Метод sleep() времени
  35. Обработка элементов в Python
  36. Управление пакетами с pip
  37. Вычисление фазы комплексного числа
  38. Управление контекстом выполнения
  39. Преобразование данных в Python
  40. Antigravity модуль
  41. Работа со словарями
  42. Возврат нескольких значений из функции
  43. Подсказки типов в Python
  44. Работа с Enum в Python3.
  45. Импорт модуля из другого каталога
  46. Лямбда-функции в Python
  47. Проверка дубликатов в Python
  48. Создание и использование ChainMap

Marketello читают маркетологи из крутых компаний