添加锁, 避免定时任务check_pending_orders堆积, 从而导致重复执行撤单, 补单
This commit is contained in:
parent
e7463158d2
commit
7c8db6adeb
@ -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):
|
||||
"""检查订单是否可行(资金或持仓是否足够)
|
||||
|
Loading…
x
Reference in New Issue
Block a user