Как доставить данные взаимодействующим сопрограммам aysncio? - PullRequest
0 голосов
/ 08 января 2019

У меня есть следующий пример, который работает с использованием сокета 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 . Кроме того, кажется, что есть примеры, которые на самом деле не работают. То есть они получают тот же тип не ожидаемой ошибки. Так что, возможно, я запутался.

Мне бы хотелось немного ясности. Если вы можете объяснить, что я не получаю, не стесняйтесь смеяться надо мной, объясняя. спасибо

...