Курс 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 defaultdict добавление ключа
  2. Удаление дубликатов из списка с помощью dict.fromkeys
  3. Игра «Угадывание чисел»
  4. Оператор Walrus в Python
  5. Упрощенный вывод данных в Python
  6. Flask — веб-фреймворк Python
  7. Логический оператор «and» в Python
  8. Список переменных с %who
  9. Использование type hints
  10. JMESPath в Python
  11. Упрощение работы с JSON-данными в Python
  12. Аргументы *args и **kwargs
  13. Создание функций высшего порядка
  14. Преобразование в float
  15. Оптимизация памяти с помощью __slots__
  16. Многострочные комментарии в Python
  17. Руководство по Pymorphy2
  18. Получение локальных переменных в Python
  19. Python 3.12: Псевдонимы типов
  20. Удаление дубликатов в pandas
  21. Идентификатор объекта в Python
  22. Обезопасьте ввод данных
  23. Обработка исключений с блоком else
  24. Функция enumerate() в Python
  25. Создание графиков в терминале
  26. Переопределение метода __and__
  27. Тест скорости набора текста на Python
  28. Модуль xkcd: добавление юмора в Python
  29. Переопределение метода __eq__
  30. Иерархия классов в Python
  31. Методы сравнения множеств
  32. Измерение времени выполнения кода
  33. Работа с аргументами командной строки в Python
  34. Документирование функций в Python
  35. Частичное совпадение ввода
  36. Настройка шрифта и цвета в Tkinter
  37. Кортеж в Python: создание и использование
  38. Присвоение значений переменным в Python
  39. Проверка типа данных
  40. Метод округления чисел
  41. Работа с комплексными числами
  42. Возвращение нескольких значений
  43. Поиск элементов BeautifulSoup
  44. Создание и использование ChainMap
  45. Группировка элементов Python
  46. Декораторы с аргументами

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