Курс Python → Обмен данными с asyncio.Queue

Asyncio.Queue предоставляет удобный способ обмена данными между асинхронными задачами в Python. Он позволяет одной задаче помещать данные в очередь, а другой задаче забирать их для обработки. Это особенно полезно в случаях, когда необходимо организовать взаимодействие между разными частями программы, работающими параллельно.

Для использования asyncio.Queue необходимо создать объект класса asyncio.Queue(). Затем асинхронные задачи могут использовать методы put() для добавления элементов в очередь и get() для извлечения элементов из очереди. Кроме того, можно использовать методы task_done() для уведомления о завершении обработки элемента и join() для ожидания завершения обработки всех элементов очереди.


import asyncio

async def producer(queue):
    for i in range(5):
        await queue.put(i)
        print(f'Producer put: {i}')
    await queue.put(None)

async def consumer(queue):
    while True:
        data = await queue.get()
        if data is None:
            break
        print(f'Consumer got: {data}')
        queue.task_done()

async def main():
    queue = asyncio.Queue()
    producer_task = asyncio.create_task(producer(queue))
    consumer_task = asyncio.create_task(consumer(queue))
    await asyncio.gather(producer_task, consumer_task)
    await queue.join()

asyncio.run(main())

В приведенном примере мы создаем две асинхронные задачи — producer, который помещает числа от 0 до 4 в очередь, и consumer, который извлекает и печатает эти числа. Когда producer завершает свою работу, он помещает значение None в очередь, чтобы consumer мог завершить свою работу. Мы используем asyncio.gather() для запуска обеих задач параллельно и await queue.join() для ожидания завершения обработки всех элементов очереди.

Твои коллеги будут рады, поделись в

Автор урока

Дмитрий Комаровский
Дмитрий Комаровский

Автоматизация процессов
в КраснодарБанки.ру

Другие уроки курса "Python"

  1. Многострочные комментарии в Python
  2. Работа с кортежами в Python
  3. Методы Python для работы с данными
  4. Имена объектов в Python
  5. Срез списка в Python
  6. Функция sleep() в Python
  7. Определение наиболее частого элемента с помощью collections.Counter
  8. Регистрация на TenChat
  9. Переопределение метода __rshift__
  10. Работа с контекст-менеджером «with»
  11. Генераторы и сеты в Python
  12. Установка random seed в Python
  13. Аннотации типов в Python
  14. Получение частей дроби
  15. Документация функции help() в Python
  16. Удаление ключа из словаря в Python
  17. Именованные срезы в Python
  18. Преобразование Word в PDF с Spire.Doc
  19. Подсказки при вводе данных в Python
  20. Проблема с изменяемыми аргументами
  21. Получение текущей даты и времени с помощью datetime
  22. Сортировка с параметром key
  23. Работа с каталогами в Python
  24. Управление контекстом выполнения кода
  25. Копирование объектов в Python
  26. F-строки в Python 3.8
  27. Атрибуты объекта в Python
  28. Логирование с Logzero
  29. Работа со словарями в Python
  30. Numpy: объединение массивов
  31. Метод rsub в Python: расширение функциональности вычитания
  32. Сортировка элементов с OrderedDict
  33. Измерение времени выполнения кода с помощью time
  34. Виртуальные среды в Python
  35. Создание GUI на Tkinter
  36. Метод count() для списка
  37. Оператор (*) в Python
  38. Синхронизация потоков с time.sleep()
  39. Применение функции map() в Python
  40. Списковое включение в Python
  41. Отображение графиков в Jupyter с Matplotlib
  42. Defaultdict в Python
  43. Цикл for в Python
  44. Сортировка с помощью key
  45. Поиск наиболее частого элемента списке
  46. Обновление данных через PUT запрос
  47. EMOT преобразование эмодзи в текст
  48. Декораторы в Python

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