wakko0815 hat geschrieben:Also ist es performanter oder in sonst einer Weise besser das ganze zeilenweise mit req.write aus einer void-funktion auszugeben oder lange strings zu "konkatenieren" und dann diesen string als return-Wert zurückzugeben?
Hallo wakko0815!
Nicht viele von uns, wenn nicht sogar sehr sehr wenige, verwenden mod_python direkt. Also einen Erfahrungsbericht wirst du hier kaum erwarten können.
Einzig ein paar Überlegungen und die Anregung zum Selbertesten, falls es wirklich so wichtig für dich ist.
Verknüpfen von Strings ist langsam, da bei jedem Zusammenfügen ein neuer String im Speicher erstellt wird. Alles an eine Liste anfügen und nur einmal mit z.B. ``"\n".join(mylist)`` zu verbinden ist sehr viel schneller.
Das Verknüpfen der Strings fällt weg, wenn du immer alles sofort an das Request (sollte das nicht Response heißen?) weiterreichst. Wahrscheinlich wird damit intern in ein fileartiges Objekt geschrieben. Vielleicht wird alles was in das "req"-Objekt geschrieben wird aber auch sofort ausgeliefert, also an den Browser geschickt. Komisch ist für mich jetzt nur, da ich mod_python nicht wirklich kenne, dass der Parameter "req" und nicht "resp" heißt. Wie auch immer.
Beim Verknüpfen der Strings fällt Zeit durch das Verknüpfen an. Beim sofortigen Weiterreichen an die Funktion ``req.write()`` fällt Zeit durch die Übergabe an eine Funktion an. Ich denke nicht dass sich eine der beiden Methoden als "schneller" herausstellt.
Die oben aufgezeigte Möglichkeit mit der Liste ist sicher am Schnellsten, da die langsame Verknüpfung von Strings nur einmal anfällt und es folglich nur einen Aufruf von ``req.write()`` gibt. Ein Anfügen von Texten an ein StringIO-Objekt wäre noch schneller. Aber den Unterschied wirst du wahrscheinlich nicht mehr messen können.
mfg
Gerold
PS: Angeblich soll die "String-Concatenation" unter Python 2.5 viel schneller als mit Python 2.4 sein.