我使用python和websocket从kucoin的api中收集tick数据。端点id ticker:all所以它意味着我从所有符号接收所有tick。
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())
当我将当前时间戳和刻度时间进行比较时,我可以看到从100ms到30秒以上的巨大波动。
我能做些什么让它更稳定吗?是因为我收到了大量的数据吗?
编辑:
所以我添加了一个";任务";根据asyncio-doc分别计算套接字中的每条消息。现在,当前毫秒和刻度时间之间的差值在上下移动,但不会从100ms增加到30s,这更好,但我想让它更稳定。
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:
因此,事实上,我可以有一个延迟,大部分时间都在100ms以下,但只要我开始对熊猫进行一些操作,例如,我处理传入蜱虫的延迟就会逐渐增加
有人能帮忙吗?
您使用的是async,所以所有东西仍然在同一个线程上运行。尝试使用线程或多处理模块来创建和更新主代码可以读取的文件。