diff --git a/src/real/real_trader_manager.py b/src/real/real_trader_manager.py index 69a4758..1b041ac 100644 --- a/src/real/real_trader_manager.py +++ b/src/real/real_trader_manager.py @@ -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): """检查订单是否可行(资金或持仓是否足够)