Курс 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. Возведение в квадрат с помощью itertools
  2. Python Calendar Usage
  3. Преобразование регистра символов
  4. Работа с часовыми поясами в Python.
  5. Определение относительного пути
  6. Пересечение списков с использованием множеств
  7. Удаление ключей из словаря
  8. Создание Telegram-бота на Python
  9. Функция zip() для объединения списков
  10. Бесконечные списки в Python
  11. Python Аргументы по умолчанию
  12. Оператор += для объединения строк
  13. Удаление элементов из списка в Python
  14. Кортеж в Python: создание и использование
  15. Оболочка Python
  16. Работа с датой и временем в Python
  17. Метод __float__ в Python
  18. Создание объекта времени
  19. Работа с процессами в Python
  20. Удаление falsy-значений из списка с помощью filter
  21. Комментарии в Python
  22. Работа со списками
  23. Названия переменных
  24. Именованные срезы в Python
  25. Обработка ошибок в Python
  26. Получение текущего времени в Python
  27. Методы __repr__ и __str__ в Python
  28. Colorama: окрашивание текста в Python
  29. Логические значения в Python
  30. Работа со строками в Python.
  31. Декораторы с аргументами в Python
  32. Замена символов в Python
  33. Определение функций с необязательными аргументами
  34. Python Тесты и Гайды
  35. Перезапуск ячейки в Jupyter Notebook с dostoevsky
  36. Многоточие в Python
  37. Взаимодействие с внешними процессами в Python
  38. Экспорт данных с помощью writefile
  39. Генерация QR-кодов с Python
  40. Оптимизация поиска в словарях
  41. Работа с многоуровневыми словарями в Python
  42. Списки в Python: основы
  43. Метод get() для словарей
  44. Получение текущей даты в Python
  45. Область видимости переменных
  46. Модуль math: основные функции
  47. Использование обратной косой черты в f-строках
  48. Работа со строками в Python

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