vnpy / vnpy

基于Python的开源量化交易平台开发框架
http://www.vnpy.com
MIT License
24.4k stars 8.57k forks source link

算法交易AlgoTrading模块,触发弹窗提醒时有时程序会未响应 #3367

Closed billzhaox closed 1 year ago

billzhaox commented 1 year ago

环境

Issue类型

三选一:Question

程序是基于vnpy3.2.0二次开发,算法交易模块运行过程中,有时触发弹窗提醒时GUI会立即变为未响应(不是所有时候都会未响应,复现条件还在排查中),如下图:

微信图片_20221124021513

下面是algotrading/engine.py中send_order()函数中触发弹窗的相关代码,WarningDialog和源码中的AboutDialog基本类似,继承于QtWidgets.QDialog:

微信图片_20221124174343

单步调试了一下,未响应时的函数调用情况如下图:

微信图片_20221124020800

怀疑是调用模态对话框没有交还控制权,导致其他Event被阻塞,造成GUI卡死?求一个排查/解决思路

vnpy commented 1 year ago
  1. 不能在事件引擎工作的后台线程中,直接对UI相关组件进行操作,否则会卡住或者崩溃
  2. UI相关的代码,统一应该放在ui/widget.py之类的专用文件中,然后通过事件或者信号的方式来触发对应逻辑