Форум сайта python.su
Добрый день, Коллеги !
Столкнулся с полтергейсом )))
Если лень читать текст, хотя бы подскажите, нет ли видимых ошибок в коде
Опишу суть проблемы
На локал хосте есть программка SIOC- Это сервер, который получает от программ симуляторов данные на запрос вида Arn.Inicio:22:25:33:67\r\n выдает значения четырех переменных 22 25 33 67 в виде пакета по 8092 порту. Если симулятор не запущен, то можно в ручном режиме выставить значения переменных и принимать их клиентом.
Пишу клиента, который создает соединение и потом в бесконечном цикле отсылает пакет и получает ответ.
Запускаю сервер, запускаю клиента, пакеты пошли, сервак отвечает. Поменял значения в серваке - клиент их получил. Потом запускаю Симулятор, и сервер начинает получать от него данные (с большой частотой) И ТУТ МОЙ КЛИЕНТ НАЧИНАЕТ ЛАГАТЬ ! Пакет-запрос послал,- ответа нет , потом может прийти а может и не прийти, может ожить на пару минут. а потом опять до посинения ждать ответа И ВСЁ. Если вырубить прием данных сервера, тоесть отключить симулятор - прием восстанавливается. Опытным путем установил, что лаги зависят от количества переменных в запросе, и от того, часто ли меняются переменные в СИОК.
Заранее благодарен всем откликнувшимся! очень NEED HELP
Куда копать не знаю. Может с буферами что- то? Какую в данном случае отладку можно произвести ? Интересует любое мнение
Вот код программы.
import socket,select host = "127.0.0.1" port = 8092 data=["Speed","Alt","Course","Data"] data_ind=["22","25","33","67"] data_count=4 packet="Arn.Inicio:22:25:33:67\r\n" ne = socket.socket() ne.connect((host, port)) ne.setblocking(0) print ("Connect to SIOC") while 1: ne.send(bytes(packet)) d=0 ResStr="" while d==0: ready = select.select([ne],[],[],0.1) if ready[0]: ResStr+=ne.recv(1) else: d=1 print (ResStr) ne.close()
Отредактировано JazzyManSerg (Ноя. 8, 2016 14:32:11)
Офлайн
Подскажите, как сделать так что б Python не висел долго на команде send, а периходил к следующим командам?
Офлайн