0

我使用 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 毫秒以下,但是一旦我开始对熊猫进行一些操作,例如,我处理传入滴答的延迟就会逐渐增加

有人可以帮忙吗?

4

0 回答 0