Ваш исходный код имеет существенную проблему в том, что он не закрывает сокет после его использования.Если бы вы обрабатывали тысячи сообщений таким образом, вы бы оставляли открытыми тысячи соединений с сокетами.Поэтому, если бы вы использовали исходный код как есть, вы бы хотели поставить sock.close()
после sock.sendall()
.
То, что вы действительно хотите здесь сделать, зависит от того, что ожидает сервер.Для произвольного сервера, прослушивающего сокет, необязательно, что вы можете отправлять одно сообщение на одно соединение или отправлять несколько сообщений по одному соединению.Поскольку вы завершаете свое сообщение с помощью EOL, сервер может использовать его, чтобы узнать, где находится конец каждого сообщения (строка является сообщением), и в этом случае он может обрабатывать несколько сообщений.Однако также возможно, что сервер ожидает получить только одно сообщение на соединение, и в этом случае вы будете вынуждены делать то, что вы делаете в исходном блоке кода.
Предполагая, что вы можете отправитьнесколько сообщений в одном соединении, вы хотите делать то, что предлагает @GarethMa ... просто создайте и подключите сокет, прежде чем выполнять цикл и обрабатывать каждое отправляемое сообщение:
sock = socket.socket()
sock.connect((CSERVER, CPORT))
for mydetails in allthelists:
hostype = mydetails[0]
graphType = mydetails[1]
hostNodeName = mydetails[2]
frequency = mydetails[3]
diskName = mydetails[4]
avgOfMultiDays = mydetails[5]
eachEpoch = mydetails[6]
messageA = '{hostype}.{graphType}.{hostNodeName}.{frequency}.{diskName}-altavg {avgOfMultiDays} {eachEpoch}\n'.format(**locals())
print 'sending message:\n%s' % messageA
sock.sendall(messageA)
socket.close()