添加锁, 避免定时任务check_pending_orders堆积, 从而导致重复执行撤单, 补单

This commit is contained in:
zhiyong 2025-05-16 20:07:18 +08:00
parent e7463158d2
commit 7c8db6adeb

View File

@ -44,6 +44,9 @@ class RealTraderManager:
# 使用传入的trader实例使用弱引用避免循环引用
self.trader = trader
# 初始化锁
self._lock = threading.Lock()
# 启动调度器
self._start_scheduler()
@ -241,7 +244,12 @@ class RealTraderManager:
def check_pending_orders(self):
"""检查限价单是否超时"""
"""检查限价单是否超时,使用锁避免重复执行"""
# 尝试获取锁,如果获取不到则说明上一个任务还在执行,直接返回
if not self._lock.acquire(blocking=False):
logger.info("check_pending_orders: 上一个任务仍在执行,跳过本次执行。")
return
try:
# 获取所有未完成订单
position_managers = self.trader.get_all_position_managers()
@ -255,7 +263,10 @@ class RealTraderManager:
except Exception as e:
# 顶层异常处理捕获获取position managers或遍历时的异常
logger.error(f"检查限价单是否超时时发生异常: {str(e)}", exc_info=True)
finally:
# 确保在任何情况下都释放锁
if self._lock.locked():
self._lock.release()
def _check_order_feasibility(self, code, direction, amount, price):
"""检查订单是否可行(资金或持仓是否足够)