У меня есть следующий пример, который работает с использованием сокета zmq, который получает данные в качестве сопрограммы и передает их сопрограмме, на которой работает клиент aiohttp. Я упрощаю код:
@asyncio.coroutine
async def rcv(addres, msgq):
init_stuff
while True:
msg = await zmq.recv()
msg.put_nowait(msg)
@asyncio.coroutine
async def send(api, msgq):
client = aiohttp.ClientSession(api, ...)
while True:
msg = await msgq.get()
resp = await client.post(api, wrap(msg))
Как я уже сказал выше, работает, что я хочу, это эквивалент rcv (), который читает из Очередь , либо queue.Queue , либо asyncio.Queue .
Я был бы рад, если бы мог вставить msgq напрямую. Тем не менее, на каждом пути, который я пробовал, я получал, что какая-то версия очереди никогда не ожидалась, или при использовании queue.Queue я просто блокирую.
Есть что-то, чего я не понимаю asyncio . Кроме того, кажется, что есть примеры, которые на самом деле не работают. То есть они получают тот же тип не ожидаемой ошибки. Так что, возможно, я запутался.
Мне бы хотелось немного ясности. Если вы можете объяснить, что я не получаю, не стесняйтесь смеяться надо мной, объясняя. спасибо