我用python和WebSocket从kucoin的api中收集了tick数据,端点id ticker:all,意思是我从所有symbol中接收到所有的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添加了一个“任务”来分别计算来自套接字的每个消息。现在,当前毫秒和滴答时间之间的增量上下移动,但不会从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毫秒以下,但只要我开始对Pandas进行一些操作(例如),我就有一个渐进的延迟,用于处理传入的滴答声。
有人能帮忙吗?
1条答案
按热度按时间gkn4icbw1#
你使用的是异步,所以所有的东西都在同一个线程上运行。尝试线程化或多处理模块来创建和更新一个你的主代码可以读取的文件。