Курс 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. Повторение элементов списков
  3. Получение значений из словарей
  4. Установка пакета в Python
  5. Пропуск начальных строк с помощью dropwhile()
  6. Метод join() для объединения элементов строки
  7. Операторы объединения в Python 3.9
  8. Список переменных с %who
  9. Применение функции map() с лямбда-функциями
  10. Методы работы со строками в Python
  11. Аннотации типов в Python
  12. Преобразование range в итератор
  13. Обработка исключений в Python
  14. Выход из профиля в Django
  15. Удаление и повторная вставка ключа в OrderedDict
  16. Тестирование модели в PyTorch
  17. Измерение времени выполнения кода
  18. Управление виртуальными средами в Python
  19. Установка максимального количества цифр
  20. Подчеркивание в REPL
  21. Функции в одну строку
  22. Отправка HTTP-запросов в Python
  23. Работа с файлами в Python
  24. Оператор is в Python
  25. Изменение объектов в Python
  26. Хеширование паролей с использованием salt
  27. Обновление шаблона base.html
  28. Python Поверхностное Копирование
  29. Срез списка в Python
  30. Поиск самого длинного слова в списке с использованием max()
  31. Определение имен функций
  32. Переопределение метода __pow__
  33. Ветвление выражения в Python
  34. Дизассемблирование Python кода
  35. Обход элементов в Python
  36. Python 3.12: переиспользование кавычек
  37. Импорт с альтернативным именем
  38. Объединение словарей в Python
  39. Создание списков в Python
  40. Управление ресурсами с контекстными менеджерами
  41. Работа с модулем cmath
  42. Синхронизация потоков с time.sleep()
  43. Импорт модуля из другого каталога
  44. Оператор @ для умножения матриц
  45. Выключение компьютера с помощью Python
  46. Разделение строки с помощью re.split()
  47. Профилирование с Pandas

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