存在以下设计问题:我打开一个 websocket 连接并每秒发送多条消息以获得开放风险。
发生的情况是消息队列正在建立大量“陈旧”消息(来自频繁发送消息),当我发送交易订单并填充订单时,风险被延迟,因为它必须等待 while 循环在以正确的风险更新之前迭代所有旧消息
即,
websockets["messages"]
中的双端队列变得非常长,并且 while 循环需要一些时间才能赶上“最近”的消息
示例代码:
import websockets
url = 'wss://www.deribit.com/ws/api/v2'
risk1 = None
risk2 = None
async with websockets.connect(url) as ws:
# send many messages every second, which builds up a lot of messages in the queue
await send_message("private/get_positions", "btc-perpetual")
await send_message("private/get_positions", "eth-perpetual")
....
await send_message("private/get_positions", "sol-perpetual")
# messages from above build up in a deque, which gets iterated one-at-a-time in while loop
response = await ws.recv()
if response["id"] == 100:
risk1 = response["result"]
elif response["id"] == 200:
risk2 = response["result"]
else:
pass
# message queue gets long, and messages go stale (response from ws.recv() ), resulting in out-of-date risk
risk_usd = calculate_risk(risk1, risk2)
if risk_usd > 0:
await post_order()
我有一些想法,但不确定是否是好的做法:
注意:每次迭代都会更新多个变量(risk1、risk2),并且所有变量都需要是最新的
也许尝试一下
await asyncio.sleep
而不是做
asyncio.sleep
在服务器端,如果您忘记了
await
关键字,服务器端不会等待发送。
我希望明白你的问题是什么,但也许我完全错了。