我使用 python 和 websocket 从 kucoin 的 api 收集刻度数据。端点 id ticker:all 所以这意味着我从所有符号接收所有刻度。
async def websocketConnect():
async def event(msg):
print(time.time())
print(msg["data"]["time"])
# Subscribe to ALL tickers
topic = "/market/ticker:all"
publicClient = WsToken(url="https://api.kucoin.com")
wsClientTick = await KucoinWsClient.create(None, publicClient, event, private=False)
await wsClientTick.subscribe(topic)
while True:
await asyncio.sleep(1)
if __name__ == "__main__":
loop = asyncio.new_event_loop()
loop.run_until_complete(websocketConnect())
当我将当前时间戳与滴答时间进行比较时,我可以从 100 毫秒到超过 30 秒的大幅波动。
我能做些什么让它更稳定吗?是因为我收到大量数据吗?
编辑 :
所以我根据 asyncio doc 添加了一个“任务”来分别计算来自套接字的每条消息。现在,当前毫秒和滴答时间之间的增量正在上下移动,但不会从 100 毫秒增加到 30 秒,这更好,但我想让它更稳定。
async def compute(msg):
print(int(time.time() * 1000) - int(msg["data"]["time"]), flush=True)
async def websocketConnect():
async def event(msg):
task = asyncio.create_task(compute(msg))
await task
# Subscribe to ALL tickers
topic = "/market/ticker:all"
publicClient = WsToken(url="https://api.kucoin.com")
wsClientTick = await KucoinWsClient.create(None, publicClient,
event, private=False)
await wsClientTick.subscribe(topic)
while True:
await asyncio.sleep(1)
if __name__ == "__main__":
loop = asyncio.new_event_loop()
loop.run_until_complete(websocketConnect())
编辑 2:
所以实际上我可以有一个延迟,大部分时间都在 100 毫秒以下,但是一旦我开始对熊猫进行一些操作,例如,我处理传入滴答的延迟就会逐渐增加
有人可以帮忙吗?