You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何重构加密货币扫描器代码 避免为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 05:36:06