Мне нужно получить данные от 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()