Курс 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. Асинхронное программирование с asyncio
  2. Оператор in для проверки наличия элемента
  3. Иерархия классов в Python
  4. Получение обратного списка чисел
  5. Метод __int__ в Python
  6. Разделение строки с помощью re.split()
  7. Работа с файлами в Python
  8. Работа с итераторами в Python
  9. Получение текущего времени в Python
  10. Функция с *args.
  11. Перевернуть список в Python
  12. Условные выражения в Python
  13. Поиск частых элементов в списке
  14. Форматирование заголовков в Python
  15. Работа с датой и временем в Python
  16. Замена текста с помощью sub
  17. Работа с процессами в Python
  18. Генераторы списков в Python
  19. Вложенные циклы в Python
  20. Аргументы *args и **kwargs
  21. Настройка вывода в Numpy
  22. Python и Монти Пайтон
  23. Очистка данных в Python
  24. Методы __repr__ и __str__ в Python
  25. Генератор чисел Фибоначчи
  26. Работа с атрибутом dict
  27. Dict Comprehension в Python
  28. Объединение словарей в Python 3.5+
  29. Измерение времени выполнения кода
  30. Вывод баннеров
  31. Синхронизация доступа к ресурсам
  32. Автоматизация скриптов на AWS Lightsail.
  33. Перезагрузка оператора в Python
  34. Форматирование строк в Python
  35. Логические операторы в Python
  36. Необязательные аргументы в Python
  37. Библиотека Emoji: использование смайлов в Python
  38. Установка пакетов с помощью pip
  39. Фильтрация списка от «ложных» значений
  40. Создание уникального проекта
  41. Генерация UUID в Python
  42. Работа с файлами в Python
  43. Метод join для объединения строк
  44. Создание Radio кнопок в tkinter
  45. Создание объекта времени
  46. Преобразование чисел в Python
  47. Импорт модулей в Python 3.12

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