Курс 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. Создание OrderedDict
  2. Константы в модуле cmath
  3. Именование столбцов в Python с pandas
  4. Блок else в обработке исключений
  5. Создание уникального проекта
  6. Удаление файлов в Python
  7. Передача неизвестных аргументов в Python.
  8. Печать календаря
  9. Имена объектов в Python
  10. Расширение информации об ошибке в Python
  11. Измерение времени выполнения кода
  12. Ограничение ресурсов в Python
  13. Настройка логгера Logzero
  14. Проверка версии Python
  15. Анализ текста на русском языке с помощью Pymystem3
  16. Метод enumerate() в Python
  17. Копирование и вставка текста в Python
  18. Измерение времени выполнения кода
  19. Поиск уникальных и повторяющихся элементов
  20. Создание инструмента обнаружения плагиата
  21. Экранирование символов в Python
  22. Оператор деления для класса Rational
  23. Combobox в Tkinter
  24. Копирование словарей и списков в Python
  25. Модуль math: основные функции
  26. Нахождение пересечения множеств
  27. Counter() — подсчет элементов
  28. Скрытие вывода данных
  29. Установка Python — Простое руководство
  30. Создание списка дат
  31. Работа с collections.Counter
  32. Разность множеств
  33. Перехват исключений в Python
  34. Работа с deque в Python
  35. Создание уникального множества
  36. Руководство по Pymorphy2
  37. Проектирование Singleton с метаклассом
  38. Метод lt для сортировки объектов
  39. Транспонирование 2D-массива с помощью zip
  40. Метод count() для списков
  41. Принципы SRP и OCP
  42. Генераторы списков
  43. Объединение словарей в Python
  44. Создание спинбокса в tkinter
  45. Метод pop() списка
  46. Конкатенация строк в Python

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