Курс 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. JSON-esque в Python
  5. Создание задания в Cron
  6. Работа со строками в Python
  7. Определение имен функций
  8. Анонимные функции Lambda
  9. Комментарии в Python
  10. Управление сессиями в Python
  11. Ускорение кода с помощью векторизации
  12. Гибкие функции Python
  13. Python Метод sleep() из time
  14. Оператор «is not» в Python
  15. Тип данных TypeVarTuple
  16. Итерация по коллекции в Python
  17. Создание объекта времени
  18. Создание пустых функций и классов в Python
  19. Отладка в командной строке
  20. Оператор @ для умножения матриц
  21. Antigravity модуль
  22. Передача параметров в Python
  23. Списки в Python: основы
  24. Объединение словарей в Python
  25. Преобразование чисел в восьмеричную строку
  26. Лямбда-функции для min/max
  27. Определение размера папок в Python
  28. Создание пользовательской коллекции в Python
  29. Работа с timedelta в Python
  30. Функция enumerate в Python
  31. Метод rrshift для пользовательских объектов
  32. Безопасные SQL-запросы в Python 3.11
  33. Хранение переменных в словаре.
  34. Структурирование именованных констант
  35. Логирование с Logzero
  36. Возвращение нескольких значений через кортеж или класс
  37. Конкатенация строк в Python
  38. Проверка элементов списка условием
  39. Переопределение метода __rshift__
  40. Группировка элементов Python
  41. Вакансии в Nebius
  42. Резервирование символов в Python
  43. Метод join для наборов
  44. Глубокое копирование объектов
  45. Печать комбинаций в Python с Itertools
  46. Роль запятой в Python
  47. Измерение времени выполнения кода с использованием time
  48. Проверка на палиндром

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