Курс 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. Расширение операции побитового «и» в Python
  2. inspect в Python: анализ кода
  3. Создание графики с черепахой
  4. Повторение и перенос строки
  5. Список и кортеж в Python
  6. Работа с Telegram API на Python
  7. Блок else в Python
  8. Замена подстроки
  9. Генераторные функции в Python
  10. Аннотации типов в Python
  11. Улучшение читаемости кода в Python
  12. Проверка подстроки в строке с помощью in
  13. Получение ID текущего процесса
  14. Применение функции map() с лямбда-функциями
  15. Работа с YAML в Python: PyYAML.
  16. Печать комбинаций в Python с Itertools
  17. Работа с файлами в Python
  18. Игра «Камень, ножницы, бумага» — Python
  19. Основные операции с Numpy
  20. Обход дочерних элементов BeautifulSoup
  21. Оператор in и not in в Python
  22. Функция sleep() в Python
  23. Объединение итераторов
  24. Работа с модулем random
  25. Многострочные строки в Python
  26. Асинхронное программирование с asyncio
  27. Метод rmatmul для обратного матричного умножения
  28. Переопределение метода __floordiv__
  29. Оценка выражений генератора в Python
  30. Создание словарей с defaultdict
  31. Повторение элементов в Python
  32. Создание директории в Python
  33. Обход словаря в Python
  34. Создание вложенных циклов for
  35. Мониторинг памяти с Pympler
  36. Создание уникального проекта
  37. Метод ior для битовых операций
  38. Получение значений из словарей
  39. Уникальные значения из списка
  40. Безопасные SQL-запросы в Python 3.11
  41. Визуализация пропусков данных
  42. Взаимодействие с внешними процессами в Python
  43. Оператор is в Python
  44. Преобразование данных в Python

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