Курс 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. Создание лямбда-функций
  3. Документация функции help() в Python
  4. Python enumerate() использование
  5. Передача аргументов в Python
  6. Поиск наиболее частого элемента списке
  7. Python: динамическая типизация и проверка типов
  8. Избегайте ошибку FileNotFoundError
  9. Сравнение строк в Python
  10. Перехват исключений в Python
  11. Удаление элементов из списка в Python.
  12. Деление в Python
  13. Присоединение элементов коллекции
  14. Запрос DELETE с библиотекой requests
  15. Метод repr() в Python
  16. Работа с PosixPath() в Python
  17. Лимиты на ресурсы Python
  18. Работа с кортежами в Python
  19. Кортеж в Python: создание, доступ, изменение
  20. Разрешение имен в Python
  21. Метод index() в Python
  22. Работа с контекст-менеджером «with»
  23. Работа с коллекциями Python
  24. Функция с *args.
  25. Именованные кортежи в Python
  26. Названия столбцов в Python таблицах
  27. Установка переменной среды в Python
  28. Извлечение аудио из видео
  29. Основные операции с библиотекой Numpy
  30. Вложенные циклы в Python
  31. Встроенные функции Python
  32. Работа с базами данных SQLite
  33. Порядок операций в Python
  34. Создание функций с произвольным количеством аргументов
  35. Оценка выражений генератора в Python
  36. Использование обратной косой черты в f-строках
  37. Переопределение метода __eq__
  38. Метод setdefault() в Python
  39. Генерация случайных чисел в Python
  40. Сериализация объектов в Python
  41. Создание словаря и множества
  42. Python Метод sleep() времени
  43. Путь к интерпретатору Python
  44. Python Поверхностное Копирование
  45. Структура данных словарь в Python
  46. Участие в LP стейкинге Waves

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