From bcc38a54b2ca8268d7233b1a0e8250d81ca4bd7d Mon Sep 17 00:00:00 2001
From: Administrator <admin@example.com>
Date: 星期二, 05 九月 2023 12:27:42 +0800
Subject: [PATCH] 为交易加锁

---
 l2/l2_data_manager_new.py |   18 ++++++++++++++++--
 1 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/l2/l2_data_manager_new.py b/l2/l2_data_manager_new.py
index c40d165..6bb11bf 100644
--- a/l2/l2_data_manager_new.py
+++ b/l2/l2_data_manager_new.py
@@ -1,5 +1,6 @@
 import io
 import logging
+import threading
 import time as t
 
 from code_attribute import big_money_num_manager, code_volumn_manager, code_data_util, industry_codes_sort, \
@@ -206,6 +207,7 @@
 class L2TradeDataProcessor:
     unreal_buy_dict = {}
     volume_rate_info = {}
+    __trade_thread_lock_dict = {}
     __codeActualPriceProcessor = CodeActualPriceProcessor()
     __ths_l2_trade_queue_manager = trade_queue_manager.thsl2tradequeuemanager()
     __thsBuy1VolumnManager = trade_queue_manager.THSBuy1VolumnManager()
@@ -595,8 +597,13 @@
             return False
         else:
             l2_log.debug(code, "鍙互涓嬪崟锛屽師鍥狅細{}", reason)
-
+            if code not in cls.__trade_thread_lock_dict:
+                cls.__trade_thread_lock_dict[code] = threading.RLock()
+            cls.__trade_thread_lock_dict[code].acquire()
             try:
+
+
+
                 l2_log.debug(code, "寮�濮嬫墽琛屼拱鍏�")
                 trade_manager.start_buy(code, capture_timestamp, last_data,
                                         last_data_index)
@@ -616,7 +623,7 @@
                 pass
             finally:
                 # l2_log.debug(code, "m鍊煎奖鍝嶅洜瀛愶細{}", l2_trade_factor.L2TradeFactorUtil.factors_to_string(code))
-                pass
+                cls.__trade_thread_lock_dict[code].release()
             return True
 
     # 鏄惁鍙互鍙栨秷
@@ -916,7 +923,11 @@
 
     @classmethod
     def __cancel_buy(cls, code):
+        # 鍔犻攣
+        if code not in cls.__trade_thread_lock_dict:
+            cls.__trade_thread_lock_dict[code] = threading.RLock()
         try:
+            cls.__trade_thread_lock_dict[code].acquire()
             l2_log.debug(code, "寮�濮嬫墽琛屾挙鍗�")
             trade_manager.start_cancel_buy(code)
             l2_log.debug(code, "鎵ц鎾ゅ崟鎴愬姛")
@@ -925,6 +936,9 @@
             logging.exception(e)
             l2_log.debug(code, "鎵ц鎾ゅ崟寮傚父锛歿}", str(e))
             return False
+        finally:
+            cls.__trade_thread_lock_dict[code].release()
+
 
     @classmethod
     def cancel_buy(cls, code, msg=None, source="l2"):

--
Gitblit v1.8.0