如何通过Python WebSocket从多字典实时获取并更新股票lp数据
解决方案
方案一:使用全局字典(快速改造现有代码)
这种方式可以直接基于你现有的全局变量思路扩展,同时满足“每只股票lp对应唯一映射”和“实时价格字典”的需求:
- 初始化全局价格字典
# 全局字典,键为股票token(tk),值为最新成交价(lp) final_feed_dict = {}
- 修改WebSocket回调函数更新字典
在event_handler_feed_update中,从收到的tick数据里提取token和lp,直接更新字典:
def event_handler_feed_update(tick): # 从tick字典中提取token(请根据券商API实际键名调整,比如部分API用'token') token = tick.get('tk') # 提取最新成交价lp(请根据券商API实际键名调整,比如部分API用'last_price') last_price = tick.get('lp') if token and last_price is not None: # 更新字典,自动维护每个token对应的唯一最新价格 final_feed_dict[token] = last_price # 若需要单独访问某只股票的价格,直接通过字典键获取,例如: # token_43232_lp = final_feed_dict.get('43232')
说明
- 字典的
token键天然是每只股票的唯一标识,通过final_feed_dict[token]就能访问对应股票的最新lp,相当于实现了“每只股票lp对应唯一变量”的需求,且比单独定义全局变量更灵活(新增订阅股票时无需修改代码)。 - 每次收到新tick时,字典会自动覆盖旧值,保证存储的始终是最新价格。
方案二:使用类封装(规范代码,避免全局变量)
如果你的代码规模较大,推荐用类封装订阅和价格管理逻辑,避免全局变量带来的耦合问题:
class NFOFeedManager: def __init__(self): # 实例内部维护实时价格字典 self.final_feed_dict = {} def event_handler_feed_update(self, tick): token = tick.get('tk') last_price = tick.get('lp') if token and last_price is not None: self.final_feed_dict[token] = last_price # 可选:添加获取单只股票最新价的便捷方法 def get_last_price(self, token): return self.final_feed_dict.get(token, None) # 初始化管理器实例 feed_manager = NFOFeedManager() # 订阅WebSocket时,指定回调为实例方法(请根据券商API的订阅方式调整) # 示例:websocket_client.subscribe(nfo_token_list, feed_manager.event_handler_feed_update)
说明
- 类实例的
final_feed_dict负责统一维护所有股票的最新价格,通过feed_manager.get_last_price('43232')可以快速获取指定股票的最新lp。 - 这种方式符合软件工程的封装原则,方便后续扩展功能(比如添加价格变动告警、历史价格存储等)。
注意事项
- 请根据你使用的券商API实际返回的tick字典键名,调整代码中的
'tk'和'lp'(比如部分API会用token或last_traded_price作为键)。 - 可以添加异常捕获逻辑,处理tick数据为空、键不存在等情况,避免程序异常崩溃。
内容的提问来源于stack exchange,提问作者Scalper Vegeta
相关产品推荐
相关产品推荐

