Курс 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. Множественное присваивание в Python
  3. Конвертация текстовых чисел с помощью Numerizer
  4. Генераторы в Python
  5. Создание пользовательской коллекции в Python
  6. kwargs в Python
  7. Проверка элементов списка условием
  8. Итерации в Python
  9. Преобразование букв в нижний регистр
  10. Синтаксис переменных цикла в Python
  11. F-строки в Python 3.8
  12. Создание функций высшего порядка
  13. Генерация случайных данных в NumPy
  14. Настройка Cron
  15. Форматирование строк в Python.
  16. Логирование в Python
  17. Добавление элемента в список.
  18. Генераторы списков в Python
  19. Преобразование регистра символов
  20. Работа с контекстным менеджером Pool
  21. Проверка дублей в списке.
  22. Python Менеджер контекста
  23. Метод __iand__ для пользовательских классов
  24. Конкатенация строк с методом join()
  25. Работа с YAML в Python: PyYAML.
  26. Создание новых функций с помощью functools.partial
  27. Оператор распаковки в Python
  28. Создание копии списка в Python
  29. Перемешивание списка с shuffle()
  30. Удаление дубликатов с помощью множеств
  31. Поиск элементов BeautifulSoup
  32. Встроенные функции Python
  33. SciPy: широкий функционал для математических операций
  34. Оператор Walrus в Python
  35. Кортеж в Python: создание и использование
  36. Работа с изменяемыми коллекциями
  37. Асинхронный код в Python
  38. Сериализация данных в JSON с помощью json.dumps
  39. Pillow: работа с изображениями
  40. Функция enumerate() — Python
  41. Получение текущей даты в Python
  42. Функция divmod() в Python
  43. Метод сравнения объектов в Python
  44. HTTP-запросы с библиотекой Requests
  45. Создание лямбда-функций
  46. Разделение строки с помощью split()
  47. Создание итерируемых объектов
  48. Отслеживание выполнения программы с библиотекой tqdm
  49. Antigravity модуль

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