Курс 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. JMESPath в Python
  3. Конкатенация строк в Python
  4. Аннотации типов в Python
  5. Методы Python для работы с данными
  6. ChainMap.new_child() — добавление нового словаря
  7. Изменение списка срезами
  8. Метод ipow для возведения в степень
  9. Лямбда-функции для min/max
  10. Solidity для DeFi Ethereum
  11. Хеширование паролей с солью
  12. Функция divmod() в Python
  13. Создание копии списка в Python
  14. Измерение времени выполнения кода с помощью time
  15. Метод join() для объединения строк
  16. Игра Виселица на Python
  17. Подписка на каналы разработчиков
  18. Объединение итераторов
  19. Обработка исключения UnboundLocalError
  20. Сравнение строк в Python
  21. Определение размера папок в Python
  22. Получение комбинаций в Python
  23. Декодирование строк в Python
  24. Работа с дробями в Python
  25. Каналы Senior: Python, Java, Frontend, SQL, C++
  26. Defaultdict в Python
  27. Лямбда-функции в Python
  28. Модуль inspect
  29. Отправка HTTP-запросов в Python
  30. Обработка аргументов Python
  31. Функция product() из itertools
  32. Виртуальное окружение Python
  33. Работа со строками
  34. Изменение регистра данных
  35. Метод join() для объединения элементов строки
  36. Список переменных с %who
  37. Многострочные комментарии в Python
  38. Вычисление логарифмов в Python
  39. Генераторы в Python
  40. Операции с массивами в NumPy
  41. Модуль inspect: получение информации о объектах
  42. Управление браузером с Selenium
  43. Создание и использование модулей в Python
  44. Форматирование данных с помощью pprint
  45. Поиск повторов в списке
  46. Распаковка значений в Python
  47. Установка и использование howdoi
  48. Генераторы данных

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