def mp_worker(row):
ip = row[0]
ip_address = ip
tcp_port = 2112
buffer_size = 1024
# Read the reset message sent from the sign when a new connection is established
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
print('Connecting to terminal: {0}'.format(ip_address))
s.connect((ip_address, tcp_port))
#Putting a breakpoint on this call in debug makes the script work
s.send(":08a8RV;")
#data = recv_timeout(s)
data = s.recv(buffer_size)
strip = data.split("$", 1)[-1].rstrip()
strip = strip[:-1]
print(strip)
termStat = [ip_address, strip]
terminals.append(termStat)
except Exception as exc:
print("Exception connecting to: " + ip_address)
print(exc)
Приведенный выше код является разделом скрипта, который вызывает проблему. Это довольно простая функция, которая подключается к сокету на основе переданного IP-адреса из запроса БД и получает ответ, который указывает версию аппаратного обеспечения аппаратного обеспечения.
Теперь проблема в том, что когда я запускаю его в режиме отладки с точкой останова на сокете, я получаю весь ожидаемый ответ от аппаратного обеспечения, но если у меня нет точки останова или я полностью запустился, запустите скрипт отвечает только частью ожидаемого сообщения. Я попытался поместить time.sleep () после отправки, чтобы увидеть, получит ли он полный ответ, и попытался использовать закомментированный метод recv_timeout (), который использует неблокирующий сокет и тайм-аут, чтобы получить Весь ответ, оба с одинаковыми результатами.
Как еще одно замечание, это работает в сценарии со всем в одном основном блоке кода, но мне нужно эту часть разделить на функцию, чтобы я мог использовать ее с библиотекой многопроцессорной обработки. Я попытался запустить его как на локальном компьютере с Windows 7, так и на сервере Unix с одинаковыми результатами.