如何从导入模块调用主函数并实现API股票数据回传?
跨模块API事件回调实现方案
需求说明
需要实现两个核心需求:
- 当
SolPYAPI.py中的API事件Event_OnMath(data)触发时,将data.MatchPrice传递给main.py - 同步调用
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()
方案说明
- 移除了原独立的
Event_OnMath函数,改为在Sample_D.run内部定义事件处理逻辑,直接调用类中保存的外部回调 quote函数新增callback参数,用于接收main.py传入的处理函数- 彻底避免循环导入问题,同时完整实现数据传递与函数触发的需求
内容的提问来源于stack exchange,提问作者狐狸醫生
相关产品推荐
相关产品推荐

