From ce463832969780579fc3a350a3619fd964487128 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=A7=D0=B5=D1=87=D0=B5?= =?UTF-8?q?=D1=82?= Date: Sat, 13 Mar 2021 22:59:52 +0500 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B2=D0=B5=D0=BB=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=20=D1=80=D0=B0=D0=B7=D0=BC=D0=B5=D1=80=20=D0=B1=D1=83?= =?UTF-8?q?=D1=84=D0=B5=D1=80=D0=B0=20=D0=B4=D0=BE=201=20=D0=BC=D0=B5?= =?UTF-8?q?=D0=B3=D0=B0=D0=B1=D0=B0=D0=B9=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- QuikPy.py | 12 ++++++------ __init__.py | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) create mode 100644 __init__.py diff --git a/QuikPy.py b/QuikPy.py index d372f6d..d1a3016 100644 --- a/QuikPy.py +++ b/QuikPy.py @@ -22,7 +22,7 @@ class QuikPy(metaclass=Singleton): # Singleton класс """Работа с Quik из Python через LUA скрипты QuikSharp https://github.com/finsight/QUIKSharp/tree/master/src/QuikSharp/lua На основе Документации по языку LUA в QUIK из https://arqatech.com/ru/support/files/ """ - bufferSize = 4096 # Размер буфера приема в байтах + bufferSize = 1048576 # Размер буфера приема в байтах (1 МБайт) socketRequests = None # Соединение для запросов callbackThread = None # Поток обработки функций обратного вызова @@ -43,7 +43,6 @@ class QuikPy(metaclass=Singleton): # Singleton класс fragments.append(fragment.decode('cp1251')) # Переводим фрагмент в Windows кодировку 1251, добавляем в список if len(fragment) < self.bufferSize: # Если в принятом фрагменте данных меньше чем размер буфера break # то это был последний фрагмент, выходим из чтения буфера - time.sleep(0.000001) # Может так получиться, что буфер будет считываться быстрее, чем заполняться. Поэтому, ставим небольшую задержку перед следующим чтением data = ''.join(fragments) # Собираем список фрагментов в строку dataList = data.split('\n') # Одновременно могут прийти несколько функций обратного вызова, разбираем их по одной for data in dataList: # Пробегаемся по всем функциям обратного вызова @@ -114,10 +113,11 @@ class QuikPy(metaclass=Singleton): # Singleton класс fragment = self.socketRequests.recv(self.bufferSize) # Читаем фрагмент из буфера fragments.append(fragment.decode('cp1251')) # Переводим фрагмент в Windows кодировку 1251, добавляем в список if len(fragment) < self.bufferSize: # Если в принятом фрагменте данных меньше чем размер буфера - break # то это был последний фрагмент, выходим из чтения буфера - time.sleep(0.000001) # Может так получиться, что буфер будет считываться быстрее, чем заполняться. Поэтому, ставим небольшую задержку перед следующим чтением - data = ''.join(fragments) # Собираем список фрагментов в строку - return json.loads(data) # Возвращаем ответ в формате JSON в Windows кодировке 1251 + data = ''.join(fragments) # Собираем список фрагментов в строку + try: # Бывает ситуация, когда данных приходит меньше, но это еще не конец данных + return json.loads(data) # Попробуем вернуть ответ в формате JSON в Windows кодировке 1251 + except json.decoder.JSONDecodeError: # Если это еще не конец данных + pass # то ждем фрагментов в буфере дальше # Инициализация и вход diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..cf98052 --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +from .QuikPy import QuikPy \ No newline at end of file