Увеличен размер буфера до 1 мегабайта

This commit is contained in:
Игорь Чечет
2021-03-13 22:59:52 +05:00
parent e5f3040209
commit ce46383296
2 changed files with 7 additions and 6 deletions

View File

@@ -22,7 +22,7 @@ class QuikPy(metaclass=Singleton): # Singleton класс
"""Работа с Quik из Python через LUA скрипты QuikSharp https://github.com/finsight/QUIKSharp/tree/master/src/QuikSharp/lua """Работа с Quik из Python через LUA скрипты QuikSharp https://github.com/finsight/QUIKSharp/tree/master/src/QuikSharp/lua
На основе Документации по языку LUA в QUIK из https://arqatech.com/ru/support/files/ На основе Документации по языку LUA в QUIK из https://arqatech.com/ru/support/files/
""" """
bufferSize = 4096 # Размер буфера приема в байтах bufferSize = 1048576 # Размер буфера приема в байтах (1 МБайт)
socketRequests = None # Соединение для запросов socketRequests = None # Соединение для запросов
callbackThread = None # Поток обработки функций обратного вызова callbackThread = None # Поток обработки функций обратного вызова
@@ -43,7 +43,6 @@ class QuikPy(metaclass=Singleton): # Singleton класс
fragments.append(fragment.decode('cp1251')) # Переводим фрагмент в Windows кодировку 1251, добавляем в список fragments.append(fragment.decode('cp1251')) # Переводим фрагмент в Windows кодировку 1251, добавляем в список
if len(fragment) < self.bufferSize: # Если в принятом фрагменте данных меньше чем размер буфера if len(fragment) < self.bufferSize: # Если в принятом фрагменте данных меньше чем размер буфера
break # то это был последний фрагмент, выходим из чтения буфера break # то это был последний фрагмент, выходим из чтения буфера
time.sleep(0.000001) # Может так получиться, что буфер будет считываться быстрее, чем заполняться. Поэтому, ставим небольшую задержку перед следующим чтением
data = ''.join(fragments) # Собираем список фрагментов в строку data = ''.join(fragments) # Собираем список фрагментов в строку
dataList = data.split('\n') # Одновременно могут прийти несколько функций обратного вызова, разбираем их по одной dataList = data.split('\n') # Одновременно могут прийти несколько функций обратного вызова, разбираем их по одной
for data in dataList: # Пробегаемся по всем функциям обратного вызова for data in dataList: # Пробегаемся по всем функциям обратного вызова
@@ -114,10 +113,11 @@ class QuikPy(metaclass=Singleton): # Singleton класс
fragment = self.socketRequests.recv(self.bufferSize) # Читаем фрагмент из буфера fragment = self.socketRequests.recv(self.bufferSize) # Читаем фрагмент из буфера
fragments.append(fragment.decode('cp1251')) # Переводим фрагмент в Windows кодировку 1251, добавляем в список fragments.append(fragment.decode('cp1251')) # Переводим фрагмент в Windows кодировку 1251, добавляем в список
if len(fragment) < self.bufferSize: # Если в принятом фрагменте данных меньше чем размер буфера if len(fragment) < self.bufferSize: # Если в принятом фрагменте данных меньше чем размер буфера
break # то это был последний фрагмент, выходим из чтения буфера
time.sleep(0.000001) # Может так получиться, что буфер будет считываться быстрее, чем заполняться. Поэтому, ставим небольшую задержку перед следующим чтением
data = ''.join(fragments) # Собираем список фрагментов в строку data = ''.join(fragments) # Собираем список фрагментов в строку
return json.loads(data) # Возвращаем ответ в формате JSON в Windows кодировке 1251 try: # Бывает ситуация, когда данных приходит меньше, но это еще не конец данных
return json.loads(data) # Попробуем вернуть ответ в формате JSON в Windows кодировке 1251
except json.decoder.JSONDecodeError: # Если это еще не конец данных
pass # то ждем фрагментов в буфере дальше
# Инициализация и вход # Инициализация и вход

1
__init__.py Normal file
View File

@@ -0,0 +1 @@
from .QuikPy import QuikPy