Как использовать python asyncio для одновременного получения данных из веб-сокета и их обработки - PullRequest
0 голосов
/ 27 апреля 2020

Мне нужно получить данные от 10+ веб-сокетов и затем использовать их для расчетов. Расчеты будут выполняться с большими интервалами времени, чем отправляет веб-сокет. Например, я хочу получать доступ к данным и использовать их каждые 10 секунд, пока они отправляются каждые 0,5 секунды.

Это прямые трансляции с рынка, поэтому мне не нужны старые данные, просто нужна последняя.

Это была моя первая попытка -

ws = create_connection("wss://api.delta.exchange:2096")
p1={"type": "subscribe","payload":{"channels":[{"name": "l2_orderbook","symbols":["BTCUSD" ]}]}}
payload=json.dumps(p1)
ws.send(payload)
result = ws.recv()

Но поскольку я не получаю ее постоянно, она дает мне старые данные.

Вот моя вторая попытка с использованием asyn c -

async def call_api(msg):
   async with websockets.connect('wss://test.deribit.com/ws/api/v2') as websocket:

       await websocket.send(msg)
       while websocket.open:
           response = await websocket.recv()
           return response

asyncio.get_event_loop().run_until_complete(call_api(json.dumps(msg)))

Теперь я получаю это непрерывно, но как мне получить доступ к нему снаружи и делать другие вещи, сохраняя при этом работу l oop?

Также я использую asyn c неправильно? Разве второй пример не похож на добавление al oop в первый, например

while True:
    ws.recv()
...