From c25954538aab85c259dc37e8235c1362d9543146 Mon Sep 17 00:00:00 2001 From: Mircea Baja Date: Thu, 24 Nov 2016 08:08:26 +0000 Subject: [PATCH] Improve getting started for -both- case (#144) * Improve getting started for -both- case * Minor tweaks. --- docs/intro.rst | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) diff --git a/docs/intro.rst b/docs/intro.rst index df250ba1..fcfbeb92 100644 --- a/docs/intro.rst +++ b/docs/intro.rst @@ -90,28 +90,26 @@ messages on the same connection. :: - async def handler(websocket, path): + async def consumer_handler(websocket): + while True: + message = await websocket.recv() + await consumer(message) + + async def producer_handler(websocket): while True: - listener_task = asyncio.ensure_future(websocket.recv()) - producer_task = asyncio.ensure_future(producer()) - done, pending = await asyncio.wait( - [listener_task, producer_task], - return_when=asyncio.FIRST_COMPLETED) - - if listener_task in done: - message = listener_task.result() - await consumer(message) - else: - listener_task.cancel() - - if producer_task in done: - message = producer_task.result() - await websocket.send(message) - else: - producer_task.cancel() - -(This code looks convoluted. If you know a more straightforward solution, -please let me know about it!) + message = await producer() + await websocket.send(message) + + async def handler(websocket, path): + consumer_task = asyncio.ensure_future(consumer_handler(websocket)) + producer_task = asyncio.ensure_future(producer_handler(websocket)) + done, pending = await asyncio.wait( + [consumer_task, producer_task], + return_when=asyncio.FIRST_COMPLETED, + ) + + for task in pending: + task.cancel() Registration ............