Курс 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. Работа с модулем os в Python
  2. Создание задания в Cron
  3. Оптимизация параметров в Python
  4. Функция с **kwargs в Python
  5. Удаление элемента из списка в Python
  6. Удаление и повторная вставка ключа в OrderedDict
  7. Обработка элементов в Python
  8. Оператор is в Python
  9. Сравнение def и lambda в Python
  10. Работа с файлами в Python
  11. Автоматизация с Python
  12. Классы данных в Python
  13. Функция count() в Python
  14. Работа с исключениями в Python
  15. F-строки в Python 3.8
  16. Определение размера папок в Python
  17. Поиск файлов по шаблону
  18. Поиск с помощью регулярных выражений
  19. Справка по импортированным модулям
  20. Создание новых списков в Python
  21. Сортировка с помощью параметра key
  22. Управление пакетами с pip
  23. Создание вложенного генератора
  24. Лямбда-функции в Python
  25. Работа с эмодзи в Python
  26. Итераторы с потерямиZIP
  27. Метод count() для списков
  28. Создание класса в Python
  29. Функция rsplit() в Python
  30. Работа с базами данных SQLite
  31. Генерация случайных данных в NumPy
  32. Howdoi — получение ответов из терминала
  33. Метод split() в Python
  34. Отладка кода
  35. Оператор == в Python
  36. Работа с CSV в Python
  37. Метод pos в Python
  38. Сохранение Unicode в JSON
  39. Создание словарей с defaultdict
  40. Хеширование паролей с использованием salt
  41. Атрибуты объекта в Python
  42. Тестирование функции сложения
  43. Работа со строками

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