Alternativen für String-Verknüpfung
Verfasst: Dienstag 29. September 2009, 11:58
Da += für große Strings bekanntermaßen speicherhungrig und langsam sein kann, habe ich eine Alternative mit Liste und join ausprobiert. Von dem Ergebnis war ich dann aber enttäuscht.
Über Telnet werden mittels read_until (bildschirm)seitenweise die Ausgaben eines Servers für einen Ansi-Terminal gelesen, bis eine bestimmte Regex erfüllt ist. Dabei werden unterschiedlich große Blöcke von wenigen KB bis zu einem halben MB übertragen (entsprechend temp in read1). Diese Blöcke werden entweder mit += oder ''.join zusammengesetzt. Während eines Programmlaufs wird die Routine 21x aufgerufen und dabei insgesamt 12 MB Daten gelesen. Dies dauert mit beiden Varianten gut 8 Minuten ohne signifikanten Unterschied. Gibt es evtl. eine performantere Lösung oder sind bei diesen Datenmengen keine wesentlichen Unterschiede zu erwarten?MfG
HWK
Über Telnet werden mittels read_until (bildschirm)seitenweise die Ausgaben eines Servers für einen Ansi-Terminal gelesen, bis eine bestimmte Regex erfüllt ist. Dabei werden unterschiedlich große Blöcke von wenigen KB bis zu einem halben MB übertragen (entsprechend temp in read1). Diese Blöcke werden entweder mit += oder ''.join zusammengesetzt. Während eines Programmlaufs wird die Routine 21x aufgerufen und dabei insgesamt 12 MB Daten gelesen. Dies dauert mit beiden Varianten gut 8 Minuten ohne signifikanten Unterschied. Gibt es evtl. eine performantere Lösung oder sind bei diesen Datenmengen keine wesentlichen Unterschiede zu erwarten?
Code: Alles auswählen
def read1():
output = []
while True:
temp = tn.read_until('ABC')
output.append(temp)
if 'DEF' in temp[-37:]:
tn.write('\r\n')
if REGEX.search(temp[-80:]):
tn.write('GHI')
break
return ''.join(output).decode('cp850')
def read2():
output = ''
while True:
output += tn.read_until('ABC')
if 'DEF' in output[-37:]:
tn.write('\r\n')
if REGEX.search(output[-80:]):
tn.write('GHI')
break
return output.decode('cp850')
HWK