Курс 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. Тестирование функции сложения
  3. Python: изменяемые и неизменяемые коллекции
  4. Отслеживание выполнения программы с библиотекой tqdm
  5. Поиск email
  6. Применение функции к каждому элементу списка
  7. Форматирование строк в Python
  8. Кортежи в Python: особенности и преимущества
  9. Объединение, распаковка и деструктуризация
  10. Область видимости переменных
  11. Monkey Patching в Python
  12. Объединение списков в Python.
  13. Поиск индексов в списке
  14. Генераторы в Python
  15. Подписка на @SelectelNews
  16. Удаление дубликатов в pandas
  17. Оператор in и not in в Python
  18. Работа с исключениями в Python
  19. Многострочные комментарии в Python
  20. f-строки в формате строк
  21. Метод get для словаря
  22. Операции с матрицами в Python
  23. Создание новых списков
  24. Поиск самого частого элемента
  25. Декораторы в Python
  26. Сравнение объектов в Python
  27. Замыкания в Python
  28. Асинхронный код в Python
  29. Добавление вложенных списков
  30. Условные выражения в Python
  31. Проекты на Python
  32. Оператор (*) в Python
  33. Переопределение метода __eq__
  34. Обратное распространение ошибки
  35. Оператор in для Python
  36. Добавление цвета в консоли
  37. 9 уловок для чистого кода
  38. Область видимости переменных
  39. Конструктор в Python
  40. Структура данных словарь в Python
  41. Управление экспортом элементов
  42. Проверка подстроки в строке
  43. Транспонирование матрицы
  44. Проблема с изменяемыми аргументами
  45. Применение функции map() с лямбда-функциями
  46. Работа с f-строками 2.0
  47. Сортировка элементов с OrderedDict
  48. ROT13 Шифр Цезаря в Python

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