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

如何从导入模块调用主函数并实现API股票数据回传?

跨模块API事件回调实现方案

需求说明

需要实现两个核心需求:

  1. 当SolPYAPI.py中的API事件Event_OnMath(data)触发时,将data.MatchPrice传递给main.py
  2. 同步调用main.py中的do_something函数处理数据

直接在SolPYAPI.py中导入main会引发循环导入问题(main导入SolPYAPI,SolPYAPI又反向导入main),导致程序运行报错。


解决方案:回调函数注册机制

通过将main.py中的处理函数作为参数传递给SolPYAPI的接口,避免循环导入,同时实现事件触发后的跨模块数据传递与函数调用。


修改后的代码实现

main.py

import SolPYAPI

def do_something(match_price):
    # 此处添加股票价格的处理逻辑
    print(f"收到实时股票价格: {match_price}")

if __name__ == '__main__':
    # 调用quote接口时,传入回调函数do_something
    SolPYAPI.quote('stock_name', 1000, callback=do_something)

SolPYAPI.py

from PY_Trade_package.MarketDataMart import MarketDataMart

class Sample_D:
    _prod: str = ""
    _sec: int = 0
    _callback = None  # 用于保存外部传入的回调函数

    @classmethod
    def run(cls):
        fQuoteEvent = MarketDataMart()
        # 定义事件处理逻辑,触发时调用外部回调
        def on_match_handler(data):
            print(data.MatchPrice)
            if cls._callback is not None:
                cls._callback(data.MatchPrice)
        fQuoteEvent.OnMatch = on_match_handler
        # 保留原有业务代码...

def quote(stock_name, sec, callback=None):
    # 修复原函数参数语法错误:参数不能使用字符串字面量
    Sample_D._prod = stock_name
    Sample_D._sec = sec
    Sample_D._callback = callback  # 注册外部传入的回调函数
    Sample_D.run()

方案说明

  1. 移除了原独立的Event_OnMath函数,改为在Sample_D.run内部定义事件处理逻辑,直接调用类中保存的外部回调
  2. quote函数新增callback参数,用于接收main.py传入的处理函数
  3. 彻底避免循环导入问题,同时完整实现数据传递与函数触发的需求

内容的提问来源于stack exchange,提问作者狐狸醫生

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:32:35