Курс 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. Перезапуск ячейки в Jupyter Notebook с dostoevsky
  2. Красивый вывод списка
  3. Форматирование вывода списков
  4. Кортеж в Python: создание и использование
  5. Поиск индекса элемента
  6. Глубокое копирование объектов
  7. Обновление шаблона base.html
  8. Построение графиков в Matplotlib
  9. Сортировка с параметром key
  10. Обмен значений переменных в Python
  11. Преобразование данных в Python
  12. HTTP-запросы с библиотекой Requests
  13. Оператор Walrus в Python 3.8
  14. Инвертирование словаря
  15. Резервирование символов в Python
  16. Скачать видео с YouTube
  17. Запуск внешних программ с subprocess
  18. Установка и использование Python-dateutil
  19. Переопределение метода __and__
  20. Измерение времени выполнения кода в Python
  21. Класс Counter() для подсчета элементов
  22. Методы list в Python
  23. Работа с NumPy.linalg
  24. Обмен переменными в Jupyter
  25. Особенности множеств в Python
  26. Функция product() в Python
  27. Конкатенация строк в Python
  28. Оператор space-invader
  29. Удаление файлов в Python
  30. Именованные срезы в Python
  31. Работа с индексами списков
  32. Python reversed() функция
  33. Удаление falsy-значений из списка с помощью filter
  34. Функция enumerate() в Python
  35. Преобразование многоуровневого словаря
  36. Оператор «моржа» (Walrus Operator)
  37. Docstring в Python
  38. Конвертация коллекций в Python
  39. Сортировка элементов с OrderedDict
  40. История Python
  41. Отправка HTTP-запросов с User-Agent
  42. Сортировка в Python
  43. Запуск внешнего кода в Jupyter
  44. Повторение элементов списков
  45. Создание объекта timedelta
  46. Псевдонимы в Python
  47. Генерация ключей RSA
  48. Генератор списка с условием if

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