Курс 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. split() — разделение строки
  3. Новшества Flask 2.0
  4. Объединение словарей в Python
  5. Функция enumerate в Python
  6. Непрерывная проверка в Python
  7. Замена текста с re.sub()
  8. Управление User-Agent в Python
  9. Работа с itertools
  10. Преобразование чисел в слова
  11. Импорт классов из другого файла
  12. Просмотр файла в Jupyter Noteboo
  13. Структура данных словарь в Python
  14. Сериализация данных в JSON с помощью json.dumps
  15. Принципы LSP и ISP в Python
  16. Списковое включение в Python
  17. Работа с IP-адресами в Python
  18. Настройка логгера Logzero
  19. Подсчет количества элементов в списке
  20. Создание веб-приложения с Flask
  21. Ускорение выполнения кода в Python
  22. Конкатенация строк с join() в Python
  23. Библиотека wikipedia для Python
  24. Основы работы с os
  25. Метод join() для объединения элементов
  26. Извлечение статей с newspaper3k
  27. Создание новых списков в Python
  28. Работа с областями видимости переменных
  29. Создание списка через итерацию
  30. Создание и инициализация объектов
  31. Повторение элементов в Python
  32. Преобразование числа в восьмеричную строку
  33. Python Calendar Usage
  34. Управление контекстом выполнения кода
  35. Поиск анаграмм с Counter
  36. Назначение максимального и минимального значения переменной в Python.
  37. Метод Event.wait() в Python
  38. Инверсия списка и строки
  39. Обрезка изображения с Pillow
  40. Логирование с Logzero
  41. Функция divmod() в Python
  42. Комментарии в Python
  43. Подсчет частоты элементов с Counter
  44. Ограничение ресурсов в Python
  45. Замена атрибута в именованном кортеже
  46. Переопределение метода xor в Python
  47. Создание новых списков через list comprehensions
  48. Сглаживание списка
  49. Обработка исключений в Python

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