У меня есть приложение python asyncio с несколькими сопрограммами, запущенными в одном потоке. Некоторые данные передаются с использованием очередей.
Потребитель очереди выглядит следующим образом:
async def queue_consumer(q):
"""Consume from an asyncio.Queue, making it an async iterable"""
while True:
try:
e = await q.get()
yield e
except:
continue
, с которого потребитель извлекается с помощью async for
. В этом конкретном случае сопрограмма, которая потребляет из определенной очереди, последовательно вызывает некоторый код, который помещает данные в свою очередь с put_nowait
. РЕДАКТИРОВАТЬ: В этом конкретном случае сопрограмма A, которая прослушивает входящий сетевой трафик,помещает сообщение в очередь сопрограммы B.
Я заметил, что существует постоянная ~ 50 мс задержка между вызовом put_nowait
в сопрограмме A и затем данными, обрабатываемыми в результатевытаскивая его из очереди, асинхронно повторяемой в сопрограмме B.
Я подозреваю, что это может быть связано с каким-то внутренним разрешением асинхронного опроса, но я не уверен, не подозреваю, где такая конфигурация может быть изменена.
Я был бы очень заинтересован в увеличении частоты опроса событий в asyncio loop
, следовательно, уменьшении наблюдаемой задержки между put_nowait
и get
в / из очереди между сопрограммами. Может быть, есть также способ подсказать платформе asyncio, чтобы раньше обрабатывать элементы из очереди?
Примечание: приложение, с которым я работаю, не выполняет никакой вычислительно сложной работы.