Курс 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. Проверка файла .py на синтаксис.
  3. Создание таблиц в Python с PrettyTable
  4. Срезы в Python
  5. Проблема с изменяемыми аргументами
  6. Переменная с нижним подчеркиванием
  7. Работа с комбинациями в Python.
  8. Функции с дополнением
  9. Логический оператор «and» в Python
  10. Lambda-функция в Python: использование с map() и sum()
  11. Ограничение ресурсов в Python
  12. Переопределение оператора % для объектов
  13. Экспорт данных с помощью writefile
  14. Логирование в Python
  15. Избегайте двойного подчеркивания
  16. enumerate() в Python для работы с индексами
  17. Операторы += в Python
  18. Метод enumerate() в Python
  19. Хранение переменных в словаре.
  20. Работа с кортежами в Python
  21. Генераторы в Python
  22. Руководство по библиотеке pydantic
  23. Обмен значений переменных в Python
  24. Оценка выражений генератора в Python
  25. Метод lt для сортировки объектов
  26. Создание панели меню Tkinter
  27. Определение функций с необязательными аргументами
  28. Группы исключений в Python
  29. Генераторы списков
  30. Метод remove() для удаления элемента из списка
  31. Разработка Telegram-ботов
  32. Тернарный оператор в Python
  33. Мощь вложенных функций в Python
  34. Метод __irshift__ для побитового сдвига вправо
  35. Форматирование строк с помощью f-строк
  36. Методы в Python
  37. Numpy: разбиение массивов
  38. Генерация случайных чисел Python
  39. Приближение чисел в Python
  40. Нахождение самого длинного слова в списке с помощью max
  41. Переопределение метода __and__
  42. Проектирование Singleton с метаклассом
  43. Итерация по итерируемым объектам
  44. Преобразование типов данных в set comprehension
  45. Передача параметров в Python
  46. Однострочники Python

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