ubuntuusers.de

Webprogrammierung mit Python (oder Perl oder Ruby). Entscheidungshilfen.

Status: Gelöst | Ubuntu-Version: Xubuntu 9.04 (Jaunty Jackalope)
Antworten |

DasIch

Avatar von DasIch

Anmeldungsdatum:
2. November 2005

Beiträge: 1130

stfischr schrieb:

  • Was für ne Anbindung verwendet ihr CGI, FastCGI, SCGI oder WSGI hier währen nen paar Details interessant (mod_wsgi? Deamon oder embedded?)?

Dass sind Details des Deployments die für dass App irrelevant sind, sofern es WSGI nutzt.

  • Ihr nehmt MySQL? Gibts da nicht performantere Lösungen? Warum SQLalchemy, wollt ihr die DB wechseln?

SQLAlchemy kümmert sich um alles wesentliche, man muss sich nicht um die Details der Datenbank kümmern und hat ein ORM wenn man den will. Dass dies erlaubt die Datenbank zu wechseln oder während der Entwicklung SQLite zu verwenden ist da eher Nebensache.

Kann jemand was über den Performanceunterschied WSGI FastCGI sagen?

Ebenfalls wieder völlig irrelevant für dein App (siehe oben).

Gibt es eine Möglichkeit Python schon vorher zu kompilieren (in Bytecode oder gar direkt in Maschinencode) um den Webserver zu entlasten? Bei PHP hat mich halt gestört, dass es wirklich grotten lahm ist, da hab ich teilweise tagelang rumoptimiert und am Ende 1 Sekunde rausgeholt. Laut einigen Benchmarks ist Python ja deutlich schneller als PHP (bei anderen ists wieder umgekehrt 🙄 ) aber da das meist Microbenchmarks sind haben die sowieso keine Aussagekraft.

Python wird in jedem Fall vom Interpreter kompiliert und dann erst ausgeführt, genauso wie Java bloß implizit.

Was gibt es für Technologien, um Python zu beschleunigen (speziell bei Webservern)?

Da keine Notwendigkeit dafür besteht gibt es keine.

So und nun die Flamewarfragen: Hat jemand Erfahrung in min 2 der folgenden Sprachen: PHP, Perl, Ruby, Python? Und dabei meine ich nicht "Ich arbeite mit X und hab auch schonmal was mit Y gemacht" ich such eher welche, die beide Sprachen aktiv nutzen. Könnt ihr was zur Performance sagen? Welche Sprache nutzt ihr lieber und warum?

Prinzipiell solltest du mit Python mehr Performance bekommen können, hängt aber vom Framework und deinem Code ab.

Ich hab mich ja eigentlich schon auf Python eingeschossen (python3 by the way) aber wenn jetzt jemand sagt: Woah XY ist 1000x schneller und einfacher ...

Python 3 kannst du gleich wieder vergessen, es sei den du hast Zeit ein paar Jahre zu warten.

Stimmt es, das man in Phyton (von den 4 erwähnten Sprachen) wirklich den konsistentesten/einfachsten Code schreibt? Was ich so gesehen habe sieht echt vielversprechend aus und meist ist Pythoncode deutlich kürzer.

Perl wird sicherlich den kürzesten Code liefern aber die kürze des Codes ist bei den Sprachen kein Vergleichskriterium mehr. Letztendlich hängt die Qualität des Codes von dir ab.

Im Allgemeinen solltest du dich nicht so auf die Geschwindigkeit konzentrieren. Wenn du die wirklich haben willst musst du webwork nehmen und dann kommt eine Seite wie http://codeflow.org dabei heraus.

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

DasIch schrieb:

Was gibt es für Technologien, um Python zu beschleunigen (speziell bei Webservern)?

Da keine Notwendigkeit dafür besteht gibt es keine.

Wieso besteht keine Notwendigkeit, Python zu beschleunigen? Außerdem gibt es welche. Psyco wurde ja schon genannt. Oder eben, dass man einzelne Programmabläufe in C auslagert. Ob das soviel bei Webserver-Geschichten bringt, ist eine andere Sache.

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4694

Wohnort: Berlin

@snafu1: Die Frage war ja speziell nach Webanwendungen gestellt. Da ist die Geschwindigkeit in aller Regel vom Netzwerkdurchsatz und den Datenbankabfragen abhängig und weniger von der CPU. Es sei denn es ist eine Webanwendung die Wettermodelle "live" durchrechnet oder etwas in der Richtung. 😉

Ich würde jedenfalls nicht vor dem Schreiben der Anwendung schon so viel Augenmerk auf die Laufgeschwindigkeit legen. Viel vermurksen kann man eher beim Datenbankentwurf, und dass dann auch sprachunabhängig. Wenn man die Daten so strukturiert, dass sie nicht zu den erwarteten Anfragen passt, nützen auch Java oder C# nichts.

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

Ich denke schon, dass man sich in mehr als einer Programmiersprache vernünftig auskennen kann.

Okay, mag ich dir zustimmen. Ich halte es aber definitiv für einen hohen Aufwand. Kommt auch immer drauf an wo man die Messlate setzt. Auch nach 6 Jahren Perl Entwicklung würde ich nicht sagen das ich wirklich alles kenne, also vernünftig riesen große vergleiche anstellen kann. Damit meine ich nicht nur die grundsyntax sondern dazu gehört ja alles was man zum arbeiten benötigt, von Templating Systeme, XML bearbeitung, ORMs etliche Module etc. pp.

Wer sich da ausführlich in zwei Sprachen auskennt und wirklich vergleichen kann, möglich vielleicht, halte ich aber für schwierig.

Das bei Python die Einrückung die Absicht des Programmierers ausdrückt und so nicht so einfach Quelltexte entstehen können, wo die Einrückung etwas anderes aussagt, als der Quelltext tatsächlich tut, finde ich gut.

Nun dass ganze ist wohl sowieso eine Diskussion für sich und jeder hat da andere Ansichten. Wollte das auch nicht diskutieren, der Satz hat halt nur gerade gepasst. ein "SCNR" hätte wohl noch besser gepasst.

Das Problem bei Tabs ist nicht, dass sie "nicht sichtbar" und von Bedeutung sind, sondern das die Bedeutung eines Tabs nicht eindeutig festgelegt ist. Wenn ein Tab immer bis zur nächsten 8er-Grenze springen würde, gäb's auch keine Probleme damit.

Dazu fällt mir halt ein Spruch aus einem Sci-Fi Film ein, leider weiß ich nicht mehr wie der Film hieß, der Spruch ging aber so: "Hätte, wäre, wenn, ist aber nicht!".

Musst Du das mit der Geschwindigkeit unbedingt ausdiskutieren? Es ist doch eigentlich Allgemeinwissen, dass Perl, Ruby und Python langsamer sind als C# und Scala.

Nun anscheind gehst du auf die Diskussion ja ein. Ansonsten ist Allgemeinwissen z.B. das die Erde Rund ist: http://de.wikipedia.org/wiki/Erde Oder doch eher Eierförmig? Nunja egal. Wenn es Allgemeinwissen ist, wo steht das? Ansonsten geht es bei dem Thema um Webapplikationen. Deine Tolle ausführung das ein statische Typisierung Vorteile hat ist zwar nett, sagt aber trotzdem nichts aus.

Was ich nicht besprechen will sind Low-Level sachen wie: Oh kuck mal ich kann ganz viele Fibonacci Zahlen generieren. Oh eine schleife läuft 1.000.000 mal woanders nur 100.000 mal pro sekunde etc.

Bei fertigen anwendungen hängt die Performance von einer Webseite mal dezent von sehr vielen Faktoren ab als nur die Programmiersprache. Ein vernünftiges auslesen der Datenbank, indexe setzen etc. kann hier über kritische laufzeit entscheiden. Nicht das Java toll Attributzugriffe kompilieren kann. Selbst bei den dynamisch Typisierten Sprachen sind heutzutage rechner so schnell das es nicht entscheiden ist wieviele Millarden mal du eine Funktion pro Sekunde aufrufen kannst.

Hinzu kommt das bei hohen Anforderungen und Bibliotheken entscheidend ist wie der Code entwickelt wurde. Hast du ein ORM das bei jedem Attribut änderung sofort ein "UPDATE" heraus wirft ist das nunmal kacke. Ein ORM das Änderung akumuliert und in einen rutsch änderungen mit einem UPDATE macht skaliert z.B. deutlich besser. Ob solche Sachen der Fall sind, und solche Sachen sind wirklich entscheidend, macht man nicht richtig weil man Programmiersprache X, Y, Z nutzt.

Und gerade bei Webseiten kann man auch von Caching und zig anderen sachen profitieren. Deine Low-Level Sachen mit der Performance einer realen Applikation zu vergleichen ist einfach total sinnlos. Und nur weil man Java, Scala, C# nutzt etc. heißt es auch nicht das deswegen die Performance besser ist. Gerade bei einer Webseite spielt auch Traffic eine Rolle bei vielen hohen I/O Zugriffen kann mehr RAM oder eine schnelle Festplatte entscheidender sein als das Java besonders schnell auf attribute zugreift oder es besonders toll den Code optimiert.

Deswegen ist die allgemeine Aussage das Scala, Java und C# um ein vielfaches schnell ist bei Webapplikation einfach nur eine dumme Aussage die nichtmal ansatzsweise irgendetwas mit der Realität zu tun hat. Und hat man einen scheiß Programmierer bekommt er auch spielend Implementationen hin die langsam sind, und das wahrscheinlich in jeder Programmiersprache.

Das ist das gleiche als wenn mir einer sagt das er für eine GUI Applikation lieber auf C setzt weil es schneller ist. Das eine GUI Applikation dann zu 99% herumidlet und die Hauptzeit damit verbringt nix zu tun wird dann nicht mehr beachtet. Und in so einem fall wird man auch nichts davon mercken ob nun eine GUI Applikation in C, Java oder Python implementiert wurde.

Ich würde jedenfalls nicht vor dem Schreiben der Anwendung schon so viel Augenmerk auf die Laufgeschwindigkeit legen. Viel vermurksen kann man eher beim Datenbankentwurf, und dass dann auch sprachunabhängig. Wenn man die Daten so strukturiert, dass sie nicht zu den erwarteten Anfragen passt, nützen auch Java oder C# nichts.

👍

Genau soetwas meine ich.

Perl wird sicherlich den kürzesten Code liefern aber die kürze des Codes ist bei den Sprachen kein Vergleichskriterium mehr. Letztendlich hängt die Qualität des Codes von dir ab.

Zu dieser Aussage hatte ich auch schonmal etwas geschrieben. Und das du bei Perl den kürzesten Code erhälst bezweifle ich ebenfalls. http://forum.ubuntuusers.de/post/2188550/ Ansonsten ist die kürze des Codes immer noch ein wichtiges Kriterium.

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@Sid Burn: Selbstverständlich hängt die Geschwindigkeit einer Anwendung nicht allein von der Ausführungsgeschwindigkeit der Implementierung des Interpreters ab, sondern von einer Vielzahl von "Umweltfaktoren". Nichts anderes hat Hello World in seinem Beitrag auch gesagt. Ebenso selbstverständlich aber ist es, dass die Verwendung von Python, Ruby und dergleichen im Vergleich zu C# und Scala keinen positiven Einfluss auf die Ausführungsgeschwindigkeit hat. Das die reine Ausführungsgeschwindigkeit bei Webanwendungen und Desktop-Anwendungen selten eine tragende Rolle spielt, steht auf einem anderen Blatt.

@Das Ich: Und was macht dieses webwork nun so viel performanter als seine Konkurrenten?

DasIch

Avatar von DasIch

Anmeldungsdatum:
2. November 2005

Beiträge: 1130

snafu1 schrieb:

DasIch schrieb:

Was gibt es für Technologien, um Python zu beschleunigen (speziell bei Webservern)?

Da keine Notwendigkeit dafür besteht gibt es keine.

Wieso besteht keine Notwendigkeit, Python zu beschleunigen?

Nicht jedes Python App ist zu langsam, also besteht keine Notwendigkeit Python prinzipiell zu beschleunigen. Sollte eine Anwendung tatsächlich zu langsam sein obwohl die Datenbankabfragen perfekt sind und ich keinen besseren Algorithmus auftreiben kann, dann überlege ich zu C oder Psyco zu greifen.

Lunar

Und was macht dieses webwork nun so viel performanter als seine Konkurrenten?

Die meiste Arbeit wird vom Clienten gemacht nicht vom App auf dem Server.

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

DasIch schrieb:

Die meiste Arbeit wird vom Clienten gemacht nicht vom App auf dem Server.

Naja und wenn du JS ausschaltest ist die Seite komplett nutzlos. Eine Webseite sollte auch möglichst ohne JS gehen. Auch ist soetwas nicht gerade Optimal für Suchmaschienranking. Von Behindertengerewcht will ich gar nicht erst reden. Aber soetwas wird dich wahrscheinlich alles sowieso nicht Interessieren.

Ebenso selbstverständlich aber ist es, dass die Verwendung von Python, Ruby und dergleichen im Vergleich zu C# und Scala keinen positiven Einfluss auf die Ausführungsgeschwindigkeit hat.

Es ist aber nicht selbstverständlich das sie einen negativen Einfluss haben.

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

Es gibt auch einige Leute, die Python für wissenschaftliche Berechnungen nutzen. In diesen Fällen muss man auf Module zurückgreifen, die in C geschrieben wurden. Es wäre doch schön (wenn wohl auch utopisch), wenn diese Dinge nativ in Python ähnlich schnell laufen würden. Von daher sehe ich schon Bedarf. Nur leider ist das eben nicht realistisch umsetzbar. Zumindest nach dem derzeitigen Stand.

DasIch

Avatar von DasIch

Anmeldungsdatum:
2. November 2005

Beiträge: 1130

Sid Burn schrieb:

Aber soetwas wird dich wahrscheinlich alles sowieso nicht Interessieren.

Welcher normale User schaltet JS aus? Das Suchmaschinenranking ist natürlich ein gewaltiges Problem und sollten Behinderte zur Zielgruppe gehören könnte dass ebenfalls ein Problem werden.

Ich persönlich vermeide lieber JS, zumindest für komplexere Sachen deswegen mache ich dass selber nicht.

Sid_Burn

Anmeldungsdatum:
23. Oktober 2004

Beiträge: 2159

DasIch schrieb:

Sid Burn schrieb:

Aber soetwas wird dich wahrscheinlich alles sowieso nicht Interessieren.

Welcher normale User schaltet JS aus? Das Suchmaschinenranking ist natürlich ein gewaltiges Problem und sollten Behinderte zur Zielgruppe gehören könnte dass ebenfalls ein Problem werden.

1) Es machen aus Sicherheitsgründen einige Leute. Zum Beispiel Firefox Leute mit NoScript, ist da nicht wenig weit verbreitet.
2) Leute mit schwächeren Rechnern können JS ausschalten da es Performanter ist. Das kann auf kleinen Nettops, Smartphones und vieles andere der Fall sein.
3) Eigentlich muss dich das nicht Interessieren warum Leute es ausschalten, es ist Möglich, und damit muss man rechnen 😉
4) Naja und wie gesagt Roboter haben grundsätzlich kein JS an deswegen auch das Problem mit dem Suchranking. Genausowenig text Reader für blinde. Oder wenn man mal mit "Lynx" etc. surft (warum das jemand macht muss dich eigentlich auch nicht interessieren).

Ich persönlich vermeide lieber JS, zumindest für komplexere Sachen deswegen mache ich dass selber nicht.

Irgendwie ist deine Aussage wiedersprüchlich. Nun vermeidest du JS, empfiehlst aber ein Framework das anscheind alles in JS umsetzt?

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@Sid Burn: Lies nicht mehr aus Beiträgen heraus, als da steht. Das Ich hat dieses Rahmenwerk nicht uneingeschränkt empfohlen, sondern diese Empfehlung an die Bedingung geknüpft, dass möglichst große Geschwindigkeit gewollt ist.

stfischr Team-Icon

(Themenstarter)
Avatar von stfischr

Anmeldungsdatum:
1. März 2007

Beiträge: 19197

So Jungs, genug geflamed. 😉

Ich habe mich entschieden, Python solls sein, ob ich nun 2 oder 3 verwende muss ich nochmal genauer recherchieren (WSGI und diverse Frameworks, mal sehen ... ). Eins konntet ihr mir klar machen: Geschwindigkeit ist relativ egal, wichtiger sind optimale DB-Abfragen.

JS kommt für mich nicht in Frage (außer als optionales Goodie, siehe Ubuntuusers).

Scala steht mit auf meiner "muss ich unbedingt mal lernen Liste" direkt hinter Modula 3.

Danke für die rege Beteiligung, ich fange jetzt mal mit nen paar Tutorials an, die ich mir rausgesucht habe und berichte euch dann in nen paar Tagen, wies so läuft.

snafu1

Avatar von snafu1

Anmeldungsdatum:
5. September 2007

Beiträge: 2133

Wohnort: Gelsenkirchen

Ich kann jetzt nur vom Hörensagen sprechen, aber jemand, der selber ein Framework als Projekt hat (bottle), sagt, WSGI sei in Python 3 definitiv kaputt. Ich bin auch nicht sicher, ob es überhaupt schon Frameworks für Python 3.x gibt. In dem Bereich wird wohl wärmsten empfohlen, sich aufgrund der Probleme erstmal an 2.x zu halten. Das wäre derzeit halt die Version 2.6.

Lunar

Anmeldungsdatum:
17. März 2006

Beiträge: 5792

@snafu1: Es ist kaputt, da nicht klar ist, wo Zeichenketten und wo Bytes verwendet werden. Da Python 3 zwischen diesen Typen klar unterscheidet (während Python 2 noch implizit konvertiert), kann man nicht mit WSGI arbeiten.

Lysander

Avatar von Lysander

Anmeldungsdatum:
30. Juli 2008

Beiträge: 2669

Wohnort: Hamburg

Lunar schrieb:

@snafu1: Es ist kaputt, da nicht klar ist, wo Zeichenketten und wo Bytes verwendet werden. Da Python 3 zwischen diesen Typen klar unterscheidet (während Python 2 noch implizit konvertiert), kann man nicht mit WSGI arbeiten.

Weiß jemand, wo da im Moment die meiste Diskussion geführt wird? Mitsuhiko z.B. wollte sich ja mal zu div. Punkten äußern, hat das aber in seinem Blog und auch im Python-Forum noch nicht getan.