Python Glossary English

Python 3.4+Асинхронное программированиепонятие

asyncio.PriorityQueue

очередь

Асинхронная очередь с приоритетом: get() отдаёт наименьший элемент. Обычно кладут кортежи (приоритет, данные).

Синтаксис

q = asyncio.PriorityQueue(); await q.put((priority, data)); priority, data = await q.get()

Элементы сравниваются целиком: при равных приоритетах кортежи сравниваются по второму полю, и если там словари или объекты без порядка — TypeError в момент put(). Поэтому кладут (приоритет, счётчик, данные), где счётчик ещё и сохраняет порядок поступления. Меньшее число — более высокий приоритет; для «больше — важнее» приоритет берут со знаком минус.

Примеры

import asyncio
async def main():
    q = asyncio.PriorityQueue()
    for prio, job in [(2, 'отчёт'), (1, 'авария'), (3, 'почта')]:
        await q.put((prio, job))
    await asyncio.sleep(0.01)
    while not q.empty():
        print(await q.get())  # → (1, 'авария') / (2, 'отчёт') / (3, 'почта')
asyncio.run(main())
import asyncio
async def main():
    q = asyncio.PriorityQueue()
    await q.put((1, {'id': 'a'}))
    try:
        await q.put((1, {'id': 'b'}))  # равный приоритет — сравнение словарей
    except TypeError as e:
        print(type(e).__name__)  # → TypeError
    await asyncio.sleep(0.01)
asyncio.run(main())

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности