websoket на python
Написал websoket, который непрерывно получает цену.
async def TickersChannel_ws():
""" Websoket подписка на цены"""
url = "wss://ws.okx.com:8443/ws/v5/public"
async with websockets.connect(url) as ws:
subs = {
"op": "subscribe",
"args": [
dict(channel="mark-price", instId="NOT-USDT-SWAP")
]
}
await ws.send(json.dumps(subs))
async for msg in ws:
msg = json.loads(msg)
if "event" not in msg:
return msg.get("data")[0].get("markPx")
Мне теперь совсем непонятно, как сделать чтобы также в непрерывном потоке сравнивать цену из подписки asyncio.run(TickersChannel_ws()) с заданным числом к примеру. while True не вариант, потому что получается, что он постоянно переконекчивается к серверу, что теряет смысл сокета.
Я понимаю, что надо условно записывать в переменную, а потом сравнивать, но так у меня тоже не получается, потомучто сокет непрерывно идет.
Ответы (1 шт):
Автор решения: Сергей Ш
→ Ссылка
import json
import asyncio
import websockets
async def TickersChannel_ws():
url = "wss://ws.okx.com:8443/ws/v5/public"
async with websockets.connect(url) as ws:
subs = {
"op": "subscribe",
"args": [
dict(channel="mark-price", instId="NOT-USDT-SWAP")
]
}
await ws.send(json.dumps(subs))
async for msg in ws:
msg = json.loads(msg)
if "event" not in msg:
yield msg.get("data")[0].get("markPx")
async def main():
async for ticker in TickersChannel_ws():
print(ticker)
asyncio.run(main())