Курс 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 enumerate() функции
  2. %pinfo: получение информации об объекте
  3. Методы shutil для работы с файлами
  4. Сортировка списка по индексам
  5. Область видимости переменных
  6. Вычисление времени выполнения
  7. Форматирование кода на Python
  8. Декораторы в Python
  9. capitalize() — изменение регистра первого символа строки
  10. Настройка шрифта и цвета в Tkinter
  11. Курсы Яндекс Практикум
  12. Объединение словарей в Python
  13. Создание словарей и множеств в Python.
  14. Работа с многоуровневыми словарями в Python
  15. Создание объекта timedelta
  16. Работа с изменяемыми списками
  17. GitHub в Telegram: подписка на уведомления
  18. Операции с числами в Python
  19. Работа с массивами в Numpy
  20. Многоточие в Python
  21. Библиотека wikipedia для Python
  22. Оценка точности модели
  23. Изменение элемента списка
  24. Функции all() и any() в Python
  25. Группировка элементов Python
  26. Получение пути к текущему скрипту с помощью os
  27. Взаимодействие с sys
  28. Хешируемые ключи в Python
  29. Объединение словарей в Python
  30. Перемешивание списка с shuffle()
  31. Метод get() в Python
  32. Библиотека sh: использование команд bash в Python
  33. Структурирование именованных констант
  34. Создание задания в Cron
  35. Проверка подстроки в строке
  36. Метод rxor для операции побитового исключающего «или»
  37. Импорт модулей в Python 3.12
  38. Разбиение текста в Python
  39. Установка Python — Простое руководство
  40. Анонимные функции в Python
  41. Обход дочерних элементов BeautifulSoup
  42. Переопределение метода __pow__
  43. Python enumerate() использование
  44. Создание треугольника Паскаля
  45. Раздувающийся словарь в Python
  46. Сортировка в Python

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