Курс Python → Управление асинхронными задачами с помощью Semaphore

Модуль asyncio.Semaphore в Python предоставляет возможность ограничивать количество одновременно выполняющихся асинхронных задач. Это может быть полезно, например, когда у вас есть ограниченные ресурсы или когда вы хотите избежать перегрузки системы. Семафор можно создать с помощью функции asyncio.Semaphore(), указав при этом максимальное количество задач, которые могут одновременно выполняться.

Давайте рассмотрим пример использования asyncio.Semaphore для управления выполнением асинхронных задач. Представим, что у нас есть несколько задач, которые должны выполняться параллельно, но не более двух одновременно. Мы можем создать семафор с лимитом 2, используя asyncio.Semaphore(2), и в каждой задаче блокировать семафор перед выполнением с помощью конструкции async with semaphore, а затем освободить его по завершении.


import asyncio

async def worker(semaphore, task_name):
    async with semaphore:
        print(f'{task_name} started')
        await asyncio.sleep(1)
        print(f'{task_name} finished')

async def main():
    semaphore = asyncio.Semaphore(2)
    tasks = [worker(semaphore, f'Task {i}') for i in range(5)]
    await asyncio.gather(*tasks)

asyncio.run(main())

В приведенном выше примере мы создаем семафор с лимитом 2 и запускаем 5 задач worker. Так как семафор позволяет одновременно выполнять только две задачи, остальные задачи будут ждать, пока одна из них завершится и освободит семафор. Это позволяет эффективно управлять ресурсами и контролировать выполнение асинхронных задач.

Использование asyncio.Semaphore в Python помогает избежать перегрузки системы и управлять параллельным выполнением задач. Этот модуль предоставляет простой и эффективный способ ограничения количества одновременно выполняющихся асинхронных задач, что делает его полезным инструментом для разработчиков, работающих с асинхронным кодом.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Фильтрация входных данных в Python
  2. Проверка класса объекта
  3. Обработка исключений
  4. Преобразование типов данных в set comprehension
  5. Работа с изменяемыми списками
  6. Изменение логики работы с временем
  7. Создание пар из последовательностей
  8. Методы обработки строк в Python
  9. Создание виртуальной среды
  10. Защита данных в Python
  11. Python UserString — создание подклассов строк
  12. Метод split() в Python
  13. Методы list в Python
  14. Дефолтные параметры в Python
  15. Получение значений из словарей
  16. CSV строка разделение в Python
  17. Удаление первого элемента списка
  18. Абстракции словарей и множеств в Python
  19. Методы сравнения множеств
  20. Выборка чисел
  21. ChainMap избыточные ключи
  22. Метод repr() в Python
  23. Метод rlshift для битового сдвига
  24. Именованные срезы в Python
  25. Аннотации типов в Python
  26. Чтение и запись TOML-конфигов
  27. Перемешивание списка с shuffle()
  28. Передача неизвестных аргументов в Python.
  29. Работа с timedelta в Python
  30. Форматирование строк в Python
  31. Переопределение метода len
  32. Работа с байтовыми строками в Python
  33. Модуль math: основные функции
  34. Оболочка Python
  35. Работа с кортежами в Python
  36. Генераторы списков в Python
  37. Замеры производительности в Python
  38. Декоратор защиты анонимных пользователей
  39. Объединение множеств в Python
  40. Избегание циклических зависимостей классов в Python
  41. Декораторы в Python
  42. Описание скриптов в README
  43. Установка переменной среды в Python
  44. Concrete Paths — метод .with_suffix()
  45. Измерение времени выполнения кода в Python
  46. Хранение переменных в словаре.
  47. Генераторы в Python

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