Курс 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. Метод rxor для операции побитового исключающего «или»
  2. Python groupby() из itertools: работа с повторяющимися элементами
  3. Профилирование данных с Pandas
  4. Пространство имен в Python
  5. Открытие, чтение и закрытие файла
  6. Область видимости переменных
  7. Работа с WindowsPath()
  8. Codecademy в Telegram
  9. Динамические маршруты во Flask
  10. Работа с коллекциями Python
  11. Константы в модуле cmath
  12. Циклы в Python
  13. Конвертация изображений в PDF
  14. Работа с аргументами командной строки в Python
  15. Работа с IP-адресами в Python
  16. Сумма элементов списка
  17. Bootle — простой веб-фреймворк
  18. Поиск индекса элемента
  19. Непрерывная проверка в Python
  20. Оператор «not» в Python
  21. Раздувающийся словарь в Python
  22. Обновление данных через PUT запрос
  23. Таймер обратного отсчета
  24. Нахождение разницы между списками в Python
  25. Переопределение метода __lshift__
  26. Область видимости переменных
  27. Управление асинхронными задачами на Python.
  28. Определение объема памяти объекта
  29. Создание новых функций через partial
  30. Обратный список чисел
  31. Сериализация объектов в Python
  32. Тестирование времени с Freezegun
  33. Виртуальные среды в Python
  34. Создание виртуальной среды
  35. Библиотека wikipedia для Python
  36. Генераторы в Python
  37. Многопоточность и асинхронное программирование в Python
  38. Логические операторы в Python
  39. Вакансии в Nebius
  40. Defaultdict в Python
  41. Удаление дубликатов с сохранением порядка с помощью dict.fromkeys
  42. Создание новых функций с помощью functools.partial
  43. Создание словарей с defaultdict()
  44. Python reversed() vs срез[::-1]
  45. Многострочные строки в Python
  46. Присвоение значений переменным в Python
  47. Шаблоны Flask: условия и циклы

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