Курс 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. Сортировка списка по индексам
  2. Сложные типы данных в Python
  3. Оператор += для объединения строк
  4. Удаление дубликатов из списка
  5. Работа с CSV в Python
  6. Ускорение кода с помощью векторизации
  7. Тестирование с unittest
  8. Математические функции в Python
  9. Создание циклической ссылки
  10. Метод is_absolute() для PurePath
  11. Управление контекстом выполнения
  12. Переворот строки с помощью срезов
  13. Порядок и длина множеств в Python
  14. Преобразование строк в числа с плавающей запятой
  15. Логирование с Logzero
  16. Отправка POST-запроса в REST API
  17. Инвертирование словаря
  18. Символ подчеркивания в Python
  19. CLI-инструмент howdoi
  20. Очистка входных данных
  21. Возвращение нескольких значений через кортеж или класс
  22. Вывод букв строки в Python
  23. Перегрузка операторов в Python
  24. Создание комплексных чисел
  25. Перезапуск ячейки в Jupyter Notebook с dostoevsky
  26. Лямбда-функции в defaultdict
  27. Создание виртуальной среды
  28. Обучение модели с указанием эпох
  29. Метод setdefault() в Python
  30. Применение промокода в Много лосося
  31. Удаление первого элемента списка
  32. Методы __repr__ и __str__ в Python
  33. Numpy: использование Ellipsis
  34. Параллельные вычисления в Python
  35. Библиотека funcy: удобные утилиты
  36. Срез в Python
  37. Декораторы в Python
  38. Декоратор проверки активности
  39. Генераторы списков
  40. Генерация резюме в Gensim
  41. Оператор деления для класса Rational
  42. Объединение строк с помощью метода join
  43. Метод __getitem__ в Python
  44. Генераторы в Python
  45. Работа с deque в Python
  46. Работа со строками в Python.
  47. Работа с контекст-менеджером «with»
  48. Отображение HTML кода в Python

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