Курс 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. Namedtuple в Python
  3. Работа с WindowsPath()
  4. Создание коллекций из выражения-генератора
  5. Хэш-функции и метод цепочек
  6. Defaultdict в Python
  7. Работа со строками в Python
  8. Обновление данных через PUT запрос
  9. Разработка Telegram-ботов
  10. Поиск самого длинного слова в списке с использованием max()
  11. Установка и использование howdoi
  12. Python itertools combinations() — группировка элементов
  13. Работа с файловой системой в Python
  14. Пространство имен в Python
  15. Нан-рефлексивность в Python
  16. Настройка вывода в Numpy
  17. Нахождение разницы между списками в Python
  18. Docstring в Python
  19. Работа с URL-адресами в Python
  20. Преобразование генераторов в циклы
  21. Метод get для словарей
  22. Функция reversed() в Python
  23. Форматирование даты с strftime()
  24. Визуализация пропусков данных
  25. Создание задания в Cron
  26. Вывод букв строки в Python
  27. Применение промокода в Много лосося
  28. Декораторы в Python
  29. Измерение времени выполнения с помощью time
  30. Структуры данных в Python
  31. Создание и использование ChainMap
  32. Добавление Progressbar в Python
  33. Счетчик ссылок в Python
  34. Создание таблиц в Python с PrettyTable
  35. Исправление ошибки NameError
  36. Создание коллекций из генератора
  37. Поиск наиболее частого элемента в списке
  38. Метод rpow в Python
  39. Взаимодействие с внешними процессами в Python
  40. ROT13 Шифр Цезаря в Python
  41. Создание обратного итератора
  42. Регулярные выражения: метод match
  43. Подсчет частотности элементов в Python
  44. Конвертация изображений в PDF
  45. Избегайте ошибку FileNotFoundError
  46. Преобразование строки в число
  47. Получение локальных переменных в Python

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