Курс 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. Метод join для наборов
  2. Проверка дубликатов в Python
  3. Значения по умолчанию в Python
  4. Работа со списками
  5. Создание копии списка в Python
  6. Удаление специальных символов
  7. Методы обработки строк в Python
  8. Оператор «or» в Python
  9. Сортировка и обратный порядок
  10. Замер времени выполнения кода
  11. Форматирование вывода списков
  12. Участие в сообществе @selectel
  13. Игра Виселица на Python
  14. Установка и использование howdoi
  15. Проверка условий в Python
  16. Оператор умножения для вектора
  17. Частичное применение функций в Python
  18. Изучение объектов с помощью dir()
  19. Объединение списков в Python
  20. Метод округления чисел
  21. Сравнение def и lambda в Python
  22. Python-dateutil — работа с датами
  23. Логирование в Python
  24. Названия столбцов в Python таблицах
  25. Модуль math: основные функции
  26. Обмен значений переменных в Python
  27. Присвоение и ссылки
  28. Возврат нескольких значений
  29. Копирование файлов с shutil()
  30. Создание вкладок с TKinter
  31. Уникальные значения из списка
  32. Инверсия списка/строки в Python
  33. Объединение словарей в Python 3.5+
  34. Искажение имен в Python
  35. Оператор «моржа» (Walrus Operator)
  36. HTTP-запросы с библиотекой Requests
  37. Поиск индекса элемента
  38. Python Translator: создание локальных переводчиков
  39. Удаление дубликатов из списка с помощью dict.fromkeys
  40. Переменная с нижним подчеркиванием
  41. Динамическая типизация в Python
  42. Повторение и перенос строки
  43. Операции с массивами в NumPy

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