Курс 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. Работа со словарями с defaultdict из collections
  2. Установка и использование модуля Wikipedia
  3. Метод rename() для переименования файлов и каталогов
  4. Использование двоеточия в Python
  5. Реверс строки и списка в Python.
  6. Функция reduce() в Python
  7. Подписка на @SelectelNews
  8. Динамическая типизация в Python
  9. Хешируемые ключи в Python
  10. Оценка точности модели
  11. Карта бомбоубежищ в Москве и Питере
  12. Извлечение аудио из видео
  13. Путь к интерпретатору Python
  14. Функции с дополнением
  15. Просмотр внешнего файла в Python
  16. Виртуальное окружение Python
  17. Основные методы NumPy
  18. Отображение графиков в Jupyter с Matplotlib
  19. Динамические маршруты во Flask
  20. Группировка элементов в словарь
  21. Генерация тестовых данных с factory_boy
  22. Создание графики с черепахой
  23. Дефолтные параметры в Python
  24. Метод pop() списка
  25. Асинхронное программирование с asyncio
  26. Создание тестовых данных с Faker
  27. Работа со строками в Python.
  28. Работа с комплексными числами в Python
  29. Ограничение ресурсов в Python
  30. Комментарии в Python
  31. Замыкания в Python
  32. Работа с итераторами в Python
  33. Проверка условий: all и any
  34. Измерение времени выполнения кода
  35. Расширение операции побитового «и» в Python
  36. PATCH-запрос с библиотекой requests
  37. Цикл for в Python
  38. Профилирование кода
  39. Использование модуля __future__
  40. Python: возвращение нескольких значений
  41. Преобразование в float
  42. Подсчет элементов в Python
  43. Именование столбцов в Python с pandas
  44. Форматирование вывода с F-строками
  45. Логирование в Python
  46. Разделение строки на пары ключ-значение.
  47. Создание задания в Cron

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