如何重构加密货币扫描器代码 避免为100+币种编写重复回调函数
重构方案
核心思路是通过闭包工厂函数批量生成独立作用域的回调,配合循环批量注册币种,完全避免冗余代码,同时保证不同币种的数据完全隔离。
实现代码
import pandas as pd # 你自己的其他导入,比如ThreadedWebsocketManager def main(): twm = ThreadedWebsocketManager(api_key=api_key, api_secret=api_secret) twm.start() # 1. 定义所有需要监听的币种,要加100+直接往这个列表填即可 target_symbols = ['ETHUSDT', 'BTCUSDT'] # 示例仅写了2个,可自行扩展 # 2. 回调工厂函数:每次调用生成独立的回调和对应的数据容器 def create_callback(symbol): # 每个币种专属的数据存储字典,存在闭包作用域完全隔离 kline_data = {'close': [], 'low': [], 'high': []} def handle_socket_message(msg): candle = msg['k'] close_price = candle['c'] highest_price = candle['h'] lowest_price = candle['l'] status = candle['x'] if status: kline_data['close'].append(close_price) kline_data['low'].append(lowest_price) kline_data['high'].append(highest_price) df = pd.DataFrame(kline_data) # 这里可以加symbol标识区分输出,也可以按自己需求修改逻辑 print(f"=== {symbol} K线数据 ===") print(df) return handle_socket_message # 3. 循环批量注册所有币种的socket监听 for symbol in target_symbols: twm.start_kline_socket(callback=create_callback(symbol), symbol=symbol) twm.join()
方案说明
- 每次调用
create_callback(symbol)都会生成独立的kline_data字典和专属回调函数,不同币种的数据完全隔离,不会出现混合存储的问题 - 新增监听币种仅需要修改
target_symbols列表,不需要额外写重复的回调逻辑,100+币种也只需要几行代码即可完成注册 - 如果需要全局统一管理所有币种的K线数据,也可以提前定义全局字典
all_kline_data = {symbol: {'close': [], 'low': [], 'high': []} for symbol in target_symbols},回调中直接通过symbol取对应容器操作即可,无需闭包也能实现。
内容的提问来源于stack exchange,提问作者Jellyfish
相关产品推荐
相关产品推荐

