Курс 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. Блок else в Python
  4. Обработка исключений в Python
  5. Хранение данных
  6. Удаление URL-адресов в Python
  7. Операторы увеличения и уменьшения в Python
  8. Декораторы в Python
  9. Работа с модулем glob в Python
  10. Генераторы списков в Python
  11. Работа с YAML в Python
  12. Управление фоновыми задачами в Python
  13. Преобразование вложенного списка
  14. Проекты на Python
  15. Генерация строк с .join()
  16. Ветвление выражения в Python
  17. Конвертация коллекций в Python.
  18. Утечки переменных цикла в Python 3.x
  19. Метод Enumerate() для списков
  20. Работа с утверждениями в Python
  21. Python 3.12: переиспользование кавычек
  22. Декораторы в Python
  23. Конкатенация строковых литералов
  24. Изменение объектов в Python
  25. Поиск уникальных и повторяющихся элементов
  26. Методы classmethod и staticmethod
  27. Конкатенация строк с методом join()
  28. Мониторинг памяти с Pympler
  29. Операция += для списков
  30. Управление ресурсами с контекстными менеджерами
  31. Функция zip() в Python
  32. Списковое включение в Python
  33. Генерация резюме в Gensim
  34. Декораторы с @wraps
  35. Переворот последовательности
  36. Отделение звука от видео
  37. Списки в Python: основы
  38. Замена текста с помощью sub
  39. Работа с IP-адресами в Python
  40. Распаковка с оператором *
  41. Модуль Operator в Python
  42. Метод join для наборов
  43. Аннотации типов в Python
  44. Основные методы NumPy
  45. Лямбда-функции в Python
  46. Символ подчеркивания в Python
  47. Генераторы в Python

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