Consider the following code:

```
async def remote_data_retriever():
    remote = Remote(sock_path)
    while True:
        Cached.update_global(remote.get_global())
        await asyncio.sleep(RTR_RETR_INTERVAL)

async def on_message(websocket, path):
    async for message in websocket:
        data = Cached.get_global()
        await websocket.send(json.dumps(data.__dict__))

if __name__ == '__main__':
    ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
    ssl_context.load_cert_chain(RTR_CERT_PATH)
    app_server = websockets.serve(on_message, RTR_LISTEN_HOST, RTR_LISTEN_PORT, ssl=ssl_context)
    try:
        asyncio.get_event_loop().run_until_complete(app_server)
        print('1')
        asyncio.get_event_loop().run_until_complete(remote_data_retriever())
        print('2')
        asyncio.get_event_loop().run_forever()
    except Exception as e:
        print(e)

```

This code will print '1' and then never print '2'. How to correctly schedule a coroutine so it does NOT block on the following call

```
asyncio.get_event_loop().run_until_complete(remote_data_retriever())

```

?