Курс 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. Измерение времени выполнения кода
  2. Создание именованных кортежей в Python
  3. Создание и удаление объектов
  4. Применение функций в Python
  5. Функция map() и ленивая оценка
  6. Конкатенация строк с join() в Python
  7. Декораторы в Python
  8. Функции с дополнением
  9. Хеширование паролей с солью
  10. Преобразование документов в PDF с помощью Spire.Office
  11. Логирование в Python
  12. Переворот списка в Python
  13. Подсчет частоты элементов с Counter
  14. Многострочные комментарии в Python
  15. Приближение чисел в Python
  16. Многоточие в Python
  17. Метод count в Python: почему count(», ») возвращает 4?
  18. Отступы в Python
  19. Работа с аргументами командной строки
  20. Изменение элемента списка
  21. Вычисление времени выполнения
  22. Модуль math: основные функции
  23. Исправление ошибки NameError
  24. Отправка поздравлений по дню рождения
  25. Метод __iand__ для пользовательских классов
  26. Цикл for в Python
  27. Создание вкладок с TKinter
  28. Цепные операции в Python
  29. Итерация по коллекции в Python
  30. Установка и использование TensorFlow
  31. Генераторы в Python
  32. Функции-генераторы в Python
  33. Подписка на каналы разработчиков
  34. Карта бомбоубежищ в Москве и Питере
  35. Работа со строками в Python
  36. Метод Self в Python
  37. Concrete Paths в Python
  38. Слияние словарей в Python 3.9
  39. Объединение словарей в Python
  40. Форматирование строк в Python
  41. Python: изменяемые и неизменяемые коллекции
  42. Оптимизация создания строк
  43. Чтение бинарного файла в Python.
  44. split() — разделение строки

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