Python / Perl - was ist besser geeignet?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
DanielH
User
Beiträge: 5
Registriert: Donnerstag 15. November 2007, 20:13

Hallo zusammen,

ich bin gerade am überlegen, ob ich Python oder Perl lernen soll.

Bis gestern war ich dabei ein Script in php zu schreiben, bis ich leider
gemerkt habe, dass php viel zu langsam ist (bzw. mir ist klar geworden
das ich multithreading brauche, was es in php nicht ohne weiteres gibt).

Das Script soll eine Liste von Proxyservern und dazugehörigen Ports
nehmen, auf Erreichbarkeit und Anonymität prüfen & abspeichern. Da es
immer ein wenig dauert, bis die Verbindung steht bzw. bis ein time-out
kommt, dauert es „eine Weile“, bis man mit php z. B. 30.000 Proxys
überprüft hat (nämlich bis zu 250 Stunden, bei 30 sec bis time-out).


Deshalb „muss“ ich jetzt eine andere Script-/Programmiersprache lernen,
welche multithreading ermöglicht.


Neben Python und Perl war noch Ruby in der engeren Auswahl, was mir
extrem gefallen hat (ich find die Syntax extrem gut).

Leider gibt es dort aber anscheinend kein gescheites multithreading,
weswegen ruby wegfällt. Hier ein Zitat dazu:

„Erstens: Ruby verwendet sogenannte Green Threads [...]
Das Problem sind jetzt nicht die Green Threads an sich [...], sondern das
Ruby keinen Mechanismus besitzt um seine Threads auf mehrere Cores/
Prozessoren zu verteilen. Wuerde Ruby native Threads verwenden, dann
wuerde sich der Kernel darum kuemmern.

Zweitens: Ruby verwendet einen Time-Slice-Scheduler fuer Threads. Das
heisst das jeder Thread ca. 10ms zur verfuegung hat, um sein Zeug zu
erledigen, danach kommt der naechste Thread dran. Auch wenn der Thread
weniger als 10ms braucht. (Mehr Details hier)

Drittens: Sobald C-Code in einer Extension ausgefuehrt wird (bzw.
allgemein kompilierter Code), blockiert der Interpreter die weitere
Ausfuehrung von Ruby-Code, bis der Code der Extension fertig ist.“

Quelle: http://forum.ruby-portal.de/viewtopic.p ... 67b1#33950


Meine erste Frage ist jetzt, ob Python auch nur solche Threads ermöglicht,
oder ob ich damit mehrere Proxys gleichzeitig überprüfen kann (1000
gleichzeitige Threads wären ideal ;) ).


Außerdem interessiert mich, welche Scriptsprache eurer Meinung nach
effektiver ist (und mit effektiv meine ich schneller in der Abarbeitung der
Aufgaben).

Schon mal Danke für's Lesen und an alle die mir bei meiner Entscheidung
helfen wollen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo DanielH, willkommen im Forum,
DanielH hat geschrieben:Bis gestern war ich dabei ein Script in php zu schreiben, bis ich leider
gemerkt habe, dass php viel zu langsam ist (bzw. mir ist klar geworden
das ich multithreading brauche, was es in php nicht ohne weiteres gibt).
Multithreading gibt es in Python zwar, aber auch den GIL. Ich hatte damit zwar nie ein Problem, aber ich habe auch nie massives Multithreading gebraucht.
DanielH hat geschrieben:Neben Python und Perl war noch Ruby in der engeren Auswahl, was mir
extrem gefallen hat (ich find die Syntax extrem gut).
Ich finde die Syntax von Ruby nicht ganz so toll, das überflüssige end hat mit meist gestört und Ruby lädt irgendwie ein, tollen Code zu schreiben, der aber auch nicht ohne weiteres verständlich ist.
DanielH hat geschrieben:Außerdem interessiert mich, welche Scriptsprache eurer Meinung nach
effektiver ist (und mit effektiv meine ich schneller in der Abarbeitung der
Aufgaben).
Effektiv sind beide, meintest du effizient?
DanielH hat geschrieben:Schon mal Danke für's Lesen und an alle die mir bei meiner Entscheidung
helfen wollen.
Die Antwort ist weder Python noch Perl (zumindest nicht erstrangig) sondern Multiprocessing statt Multithreading. In der Oktoberausgabe des Python Magazine findest zu ab Seite 5 eine Vorstellung von pyprocessing und Parallel Python, welche einem mit Multiprocessing helfen.
Natürlich kannst du das auch mit PHP, Perl oder Ruby machen...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@DanielH: Weder die "Green"-Threads bei Ruby noch das GIL bei Python sollten für Dich ein Problem darstellen. Dein Code ist nicht CPU- sondern IO-intensiv d.h. die meiste Zeit wird sowieso mit warten auf Daten verbracht.

Und 1000 Threads solltest Du schnell wieder vergessen. Da erreicht man ganz schnell Begrenzungen vom Betriebssystem. Zum Beispiel bei der Anzahl der gleichzeitig offenen Verbindungen. Und jeder Thread hat seinen eigenen Stack. Mal angenommene 1 MiB Stack pro Thread, verbraucht dass mal eben relativ sinnlos 1 GiB Speicher.
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

BlackJack hat geschrieben:Dein Code ist nicht CPU- sondern IO-intensiv d.h. die meiste Zeit wird sowieso mit warten auf Daten verbracht.
Waere das was fuer asyncore/asynchat?
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Rebecca hat geschrieben: Waere das was fuer asyncore/asynchat?
Sicher geht das mit asyncore, da gibts dann so schön 1 Thread der alle Sockets überwacht, man muss halt einfach das HTTP-Zeugs selber schreiben.

Gruss
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

@DanielH:

Auch ein Willkomemn meinerseits!
Ich programmiere teils in python, teils in perl, neuerdings schau ich mir auch C# an, aber das nur nebenbei.
Perl ist optimal für dein vorhaben, garantiert! ;)
Es gibt vorallem genügend Dokumentationen... falls du was an Material brauchst sag bescheid.
Und wenn du schon dutzende Server testest, dann ist für dich vlt fierce intressant 8)

Perl ist kryptischer als andere Sprachen, aber gerade das lieb ich irgendwie an der Sprache.
Vorallem brauchste verdammt wenig Zeilen um teils schon komplexe Sachen zu machen im Gegensatz zu anderen Sprachen!

Hätte auch noch ein e-book im angebot wo beschrieben ist wie man sich ne Spider baut :roll:

Zu deiner Frage bezüglich der effektivität:

Ich hab den Eindruck, das Python schon irgendwie schneller ist in manchen Bereichen (Minimal), aber wenns um Internet geht -> perl, ganz klar.

-> google -> fierce site:ha.ckers.org

heide!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:Und 1000 Threads solltest Du schnell wieder vergessen. Da erreicht man ganz schnell Begrenzungen vom Betriebssystem. Zum Beispiel bei der Anzahl der gleichzeitig offenen Verbindungen.
Naja, die Anzahl der Threads sollte nicht so das Problem sein.
Wikipedia zu NPTL hat geschrieben:In tests, NPTL succeeded in starting 100,000 threads on a IA-32 in two seconds. In comparison, this test under a kernel without NPTL would have taken around 15 minutes.
Man nuss nur den per-Thread-Speicher klein halten. Ist aber relativ aufwendig unter Python.

Also: asnycore nutzen oder mehrere Worker-Prozesse.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Der zitierte Artikel zeigt genau das Problem mit Threads: ob das (effizient) funktioniert hängt stark von der Implementierung der Threads ab. Es gibt ja auch noch andere Betriebssysteme und da oft auch mehrere Thread-Implementierungen.

Und ob man wirklich tausende von Sockets gleichzeitig aufmachen kann ist auch so eine Frage. Das sind letztendlich auch Kernel-Resourcen die nicht unbegrenzt sind. Wenn man zuviele Verbindungen öffnet kann es auch passieren, das man Zeitüberschreitungen bekommt, weil der Netzzugang "dicht" ist, obwohl die Gegenseite eigentlich antworten könnte.

Das Problem bei sequentieller Abarbeitung ist ja, das einige Gegenstellen blockieren bis die Zeitüberschreitung eintrifft. Lösung: mehrere Anfragen starten, damit die schnelleren abgefertigt werden können während auf die langsamen gewartet wird. Effiziente Lösung wäre es vielleicht mehrere Anfragen zu starten und per `select` zu wählen und immer wenn Anfragen zu lange blockieren diese an einen Thread weiter zu reichen, der sich um die lahmen Enten kümmert, wieder mit mehreren Anfragen und `select`. Das kann man sicher auch kaskadieren. Auf diese Weise hat man eine "Expressabfertigung" wo die schnellen Fälle zügig abgearbeitet werden und gleichzeitig eine gute Kontrolle darüber wieviele Anfragen gleichzeitig laufen.
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

Hallo,

eventuell mit generatoren und Microthreads machbar in Python?
Zuletzt geändert von pyStyler am Samstag 17. November 2007, 09:41, insgesamt 1-mal geändert.
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

pyStyler hat geschrieben:Hallo,

eventuell mit generatoren und Microthreads machbar in Python?

Gruss
Driton
Ich bin mir nicht so ganz sicher, ob ich das Stichwort "Microthreads" gerade gedanklich richtig einordne, aber ich meine "ja", gucke dir mal "yield" an.

Beipsiel:

Code: Alles auswählen

def generator():
  yield 1
  yield 2
  print "vor 3"
  yield 3

for x in generator():
  print "-"
  print x
[/code]
BlackJack

Microthreads, Co-Routinen, Actors, Greenlets, Tasklets, … irgendwie scheint da jede Implementierung ihren eigenen Namen für erfinden zu wollen. :-)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

BlackJack hat geschrieben:Der zitierte Artikel zeigt genau das Problem mit Threads: ob das (effizient) funktioniert hängt stark von der Implementierung der Threads ab. Es gibt ja auch noch andere Betriebssysteme und da oft auch mehrere Thread-Implementierungen.
Ja, wenn man aber ein schlechtes OS verwendet, hat man so oder so schlechte Karten, das wird sicherlich nicht das einzige Problem damit gewesen sein. :)

Achja, ich werfe auch noch Continuations in die Runde. :D
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

skypa hat geschrieben:Perl ist kryptischer als andere Sprachen, aber gerade das lieb ich irgendwie an der Sprache.
Vorallem brauchste verdammt wenig Zeilen um teils schon komplexe Sachen zu machen im Gegensatz zu anderen Sprachen!
Da Code weit öfter gelesen als geschrieben wird, ist das ein grenzwertiges Argument. Nicht, dass wenig Code schlecht wäre, im Gegenteil. Doch wenn er nicht leicht lesbar und verständlich ist, wirkt das dem Vorteil wieder deutlich entgegen.
DanielH
User
Beiträge: 5
Registriert: Donnerstag 15. November 2007, 20:13

Danke Leute.

Leonidas schrieb:
Ich finde die Syntax von Ruby nicht ganz so toll, das überflüssige end hat mit meist
gestört und Ruby lädt irgendwie ein, tollen Code zu schreiben, der aber auch nicht ohne
weiteres verständlich ist.
Der Vorteil dabei ist, dass man den Code per Tastendruck einrücken lassen kann (falls die
IDE das unterstützt). So ist funktioniert das zumindest bei meiner php IDE (Zend Studio).

Oder funktioniert das auch mit Python? (Kann ja eigentlich überhaupt nicht gehen, soweit
ich das sehe).


BlackJack schrieb:
@DanielH: Weder die "Green"-Threads bei Ruby noch das GIL bei Python sollten für Dich
ein Problem darstellen. Dein Code ist nicht CPU- sondern IO-intensiv d.h. die meiste Zeit
wird sowieso mit warten auf Daten verbracht.
Ach so, die Wartezeit wird dem Thread nicht angerechnet.
Allerdings funktioniert das nur bei solchen einfachen Sachen; wenn ich später etwas
komplexeres machen will, müsste ich wieder eine neue Sprache lernen.

BlackJack schrieb:
Und 1000 Threads solltest Du schnell wieder vergessen. Da erreicht man ganz schnell
Begrenzungen vom Betriebssystem. Zum Beispiel bei der Anzahl der gleichzeitig offenen
Verbindungen. Und jeder Thread hat seinen eigenen Stack. Mal angenommene 1 MiB
Stack pro Thread, verbraucht dass mal eben relativ sinnlos 1 GiB Speicher.
Also 100 Threads würden mir auch schon reichen ;)


skypa schrieb:
[...] neuerdings schau ich mir auch C# an, aber das nur nebenbei.
C# in Verbindungen mit ASP.NET soll auch extrem leistungsfähig sein (Für Server-
Applikationen). Allerdings wechsle ich demnächst von Windows zu Linux,
und da wäre es dumm, wenn ich C# lernen würde.

Perl ist optimal für dein vorhaben, garantiert! ;)
Ich hab den Eindruck, das Python schon irgendwie schneller ist in manchen Bereichen
(Minimal), aber wenns um Internet geht -> perl, ganz klar.
Danke, ich schätze dann seh' ich mir erstmal Perl etwas genauer an. Meine Scripte sollen
nämlich in erster Linie auf Servern laufen.

Das Gute ist, dass ich bereits seit längerem ein multithread Perl Script habe, was genau
macht, was ich haben will. Ich müsste nur ein paar Änderungen machen, um es an
meine Bedürfnisse anzupassen.


Leonidas schrieb:
Die Antwort ist weder Python noch Perl (zumindest nicht erstrangig) sondern
Multiprocessing statt Multithreading. In der Oktoberausgabe des Python Magazine findest
zu ab Seite 5 eine Vorstellung von pyprocessing und Parallel Python, welche einem mit
Multiprocessing helfen. Natürlich kannst du das auch mit PHP, Perl oder Ruby machen...
Meinst du forken? Das war das Einzige, was ich zu dem Thema bei php gefunden habe.
Das scheint aber ziemlich schwierig zu sein (ich hab mehrmals gelesen, dass sogar
erfahrene php Entwickler vor forken zurückschrecken). Ich hab zwar eine php-classe
gefunden, die das forken vereinfachen soll (welche sich allerdings noch im Beta-Stadium
befindet), aber ich weiß nicht... php scheint für so was nicht gerade geeignet zu sein.

Ich denke ich werde lieber anfangen Perl zu lernen, anstatt mich mit php weiter zu
beschäftigen.


Allerdings habe ich gedacht, dass Python die effizientere Sprache für's Internet ist. Der
Grund weshalb ich angefangen habe mich für Python zu interessieren, ist nämlich, dass
Googles Spider anscheinend in Python geschrieben ist (hab ich an zwei
verschiedenen Stellen gelesen). Und ich denke nicht, dass die bei den Millionen Seiten,
die Google pro Tag spidert, etwas nehmen, wenn es was geeigneteres gäbe. Aber wer
weiß, ob das überhaupt stimmt...

btw. Google sucht anscheinend Python Programmierer:
http://www.google.de/search?client=oper ... lr=lang_de

Und wie's aussieht ist Google nicht gerade der schlechteste Arbeitgeber:
http://www.sueddeutsche.de/wirtschaft/a ... 73/112661/
(Zu dem Thema gab's ma ein richtig krasses Viedeo auf YouTube;
ich find's aber irgendwie nicht mehr..)


PS: Python muss ich mir aber früher oder später auch mal genauer ansehen;
was bisher gesehen habe, hat mir ziemlich gut gefallen.

PPS:
Effektiv sind beide, meintest du effizient?

Genau, ich hab effizient gemeint ;)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

skypa hat geschrieben:Perl ist kryptischer als andere Sprachen, aber gerade das lieb ich irgendwie an der Sprache.
Vorallem brauchste verdammt wenig Zeilen um teils schon komplexe Sachen zu machen im Gegensatz zu anderen Sprachen!
Ich denke da sollte man unterscheiden, ob man mit wenig Code viel machen kann oder ob man Code durch Abkürzungen kryptisch "komprimieren" kann.

Bei Perl kann man super toll kryptisch kleinen Code schreiben. Wichtiger ist jedoch der erste Punkt, das man komplexe Dinge mit wenigen Codezeilen erledigen kann, weil es eine mächtigen Bibliothek gibt. Stichwort: [wiki=Allgemeine_Begriffe#B]batteries included[/wiki], siehe auch http://de.wikipedia.org/wiki/Python_%28 ... bibliothek

Wobei natürlich Perl auch eine Menge bietet, so ist es nicht.

Was ich eigentlich sagen wollte: Das man in Perl kryptischen, kleinen Code schreiben kann, ist IMHO ehr ein Nachteil. Was hat man davon wirklich, außer den wow Effekt? Besser ist es doch, das man Code auch nach einiger Zeit noch gut lesen kann.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

DanielH hat geschrieben:
Ich finde die Syntax von Ruby nicht ganz so toll, das überflüssige end hat mit meist
gestört und Ruby lädt irgendwie ein, tollen Code zu schreiben, der aber auch nicht ohne
weiteres verständlich ist.
Der Vorteil dabei ist, dass man den Code per Tastendruck einrücken lassen kann (falls die
IDE das unterstützt). So ist funktioniert das zumindest bei meiner php IDE (Zend Studio).

Oder funktioniert das auch mit Python? (Kann ja eigentlich überhaupt nicht gehen, soweit
ich das sehe).
Da hast du ganz recht - aus einem nicht eingerückten Code kannst du nicht automatisch eingerückten Code machen. Aber: das brauchst du auch nicht. Ich habe es in vier Jahren Python Nutzung kein einziges mal gebraucht. Ich schreibe ja Code der eingerückt ist (wobei mein Editor automatisch bestimmte Zeilen einrückt, so dass ich nur [Backspace] drücken muss, wenn ich mit dem Block fertig bin, um eine Einrückungsebene zu verlassen), andere schreiben genauso Code der eingerückt ist. Das tolle ist auch, dass sich fast alle an PEP8 halten, so dass der Code immer gleich eingerückt ist, du also in der Regel Code nicht manuell einrücken musst. Zudem kann mein Editor noch Block-Indentation, womit ich ganze Blöcke auf einmal einrücken kann. Damit bin ich wesentlich schneller unterwegs, als wenn ich überall 'end' tippen müsste, der Code bleibt gezwungernermaßen lesbar.
DanielH hat geschrieben:C# in Verbindungen mit ASP.NET soll auch extrem leistungsfähig sein (Für Server-
Applikationen). Allerdings wechsle ich demnächst von Windows zu Linux,
und da wäre es dumm, wenn ich C# lernen würde.
Du kannst durchaus ASP.NET mit C# oder IronPython unter Linux mit Mono und XSP nutzen. Aber ich habe es mir grade angeschaut - es schaut aus wie eine Templatesprache, also etwa PHP. Das fand ich auch toll, als ich nichts anderes kannte, aber seitdem es wirklich viele gute Frameworks gibt, fühlt es sich Amateurhaft an, Code mit HTML zu mischen.
DanielH hat geschrieben:
Die Antwort ist weder Python noch Perl (zumindest nicht erstrangig) sondern
Multiprocessing statt Multithreading. In der Oktoberausgabe des Python Magazine findest
zu ab Seite 5 eine Vorstellung von pyprocessing und Parallel Python, welche einem mit
Multiprocessing helfen. Natürlich kannst du das auch mit PHP, Perl oder Ruby machen...
Meinst du forken? Das war das Einzige, was ich zu dem Thema bei php gefunden habe.
Das scheint aber ziemlich schwierig zu sein (ich hab mehrmals gelesen, dass sogar
erfahrene php Entwickler vor forken zurückschrecken). Ich hab zwar eine php-classe
gefunden, die das forken vereinfachen soll (welche sich allerdings noch im Beta-Stadium
befindet), aber ich weiß nicht... php scheint für so was nicht gerade geeignet zu sein.
Lies doch die Artikel die ich dir verlinke.
Forking mit Parallel Python läuft so:

Code: Alles auswählen

import pp
job_server = pp.Server()
f1 = job_server.submit(func1, args1, depfuncs1, modules1)
f2 = job_server.submit(func2, args2, depfuncs2, modules2)
f3 = job_server.submit(func3, args3, depfuncs3, modules3)
r1 = f1()
r2 = f2()
r3 = f3()
D.h. also: das ganze Forken ist vor dir versteckt, ebenso wie die IPC. Darum kümmert sich `pp`, da musst du dir keine Gedanken mehr machen. `processing` ist ebenso einfach zu nutzen und wäre wohl für deinen Einsatzzweck besser geeignet (Worker-Prozesse die die zu verarbeitenden Daten aus einer Queue holen).
DanielH hat geschrieben:Ich denke ich werde lieber anfangen Perl zu lernen, anstatt mich mit php weiter zu
beschäftigen.
Gibs zu, du wolltest sowieso nur eine positive Meinung zu Perl hören, das der Rest dir bereits gesagt hat wie man das ganze effizienter ohne Threads lösen kann hat dich bisher nicht interessiert. Du hast dir nicht einmal den von mir verlinkten Artikel angeschaut.
DanielH hat geschrieben:Allerdings habe ich gedacht, dass Python die effizientere Sprache für's Internet ist. Der
Grund weshalb ich angefangen habe mich für Python zu interessieren, ist nämlich, dass
Googles Spider anscheinend in Python geschrieben ist (hab ich an zwei
verschiedenen Stellen gelesen). Und ich denke nicht, dass die bei den Millionen Seiten,
die Google pro Tag spidert, etwas nehmen, wenn es was geeigneteres gäbe. Aber wer
weiß, ob das überhaupt stimmt...
Wenn Google einen sehr effizienten Spider brauchte, dann würden sie C nutzen. Jedoch braucht der Spider keine so große Performance zu haben, da er sowieso oft auf Daten warten muss, da ist es egal ob er in C oder in Python geschrieben ist. Warum Google Python nutzt und nicht etwa Perl ist, dass die Codes lesbar sind. Stell dir vor, jemand hätte den Spider in Perl geschrieben und verlässt die Firma. Dann dürfte Google den Spider neu schreiben, da es in der Regel zu aufwendig ist fremden Perl-Code zu verstehen als einen neuen Spider zu bauen. Mit Python hat man C hingegen den Vorteil, dass man schnell neue Features einbauen kann, ohne sich mit aufwendiger Stabilitätsanalyse befassen zu müssen.

Der Python-Erfinder, Guido van Rossum, arbeitet inzwischen auch bei Google.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@DanielH: Ich denke Du machst Dir viel zu viele unnötige Gedanken um Threads und Performance. Insbesondere beim Thema "Internet", wo der Rechner wirklich die meiste Zeit mit warten auf IO beschäftigt ist und die Threads mehr in blockierenden Systemaufrufen stecken und "schlafen" als das wirklich gerechnet wird.

Auf der anderen Seite sind alle genannten Sprachen (Perl, PHP, Ruby, Python) bei wirklich CPU-lastigen Aufgaben "ungeeignet", da helfen auch keine Threads, da will man C/C++/Fortran verwenden bzw. Code in diesen Sprachen mit der höheren Sprache verbinden. Bei Python ist das klassische Beispiel das `numpy`-Paket für schnelles Rechnen mit mehrdimensionalen Arrays.

Perl, Ruby und Python sind alle geeignet für "Internetprogramme". Such Dir die Sprache aus, die Dir am ehesten zusagt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

DanielH hat geschrieben:
Ich finde die Syntax von Ruby nicht ganz so toll, das überflüssige end hat mit meist
gestört und Ruby lädt irgendwie ein, tollen Code zu schreiben, der aber auch nicht ohne
weiteres verständlich ist.
Der Vorteil dabei ist, dass man den Code per Tastendruck einrücken lassen kann (falls die
IDE das unterstützt). So ist funktioniert das zumindest bei meiner php IDE (Zend Studio).

Oder funktioniert das auch mit Python? (Kann ja eigentlich überhaupt nicht gehen, soweit
ich das sehe).
Wenn man in Python vernünftig programmiert (wie auch in jeder anderen Sprache), dann braucht man kein automatisches Code-Formatting/-Tidying, falls du das meinst. Dennoch wird es das bestimmt auch für Python geben, möglicherweise bringt das PyDev-Modul für Eclipse diese Fähigkeit mit. Letztlich entscheidet bei mir aber nicht die IDE über die Programmiersprache, die ich verwende - eher umgekehrt. Und für Python braucht's keine IDE, hilft aber einigen Leuten.

DanielH hat geschrieben:Danke, ich schätze dann seh' ich mir erstmal Perl etwas genauer an. Meine Scripte sollen nämlich in erster Linie auf Servern laufen.
Glaub mir, da laufen Python-Anwendungen sehr gut und in sehr großer Zahl. Auch auf Servern ist Python mittlerweile schon schwer wegzudenken, weil doch so manche Tools darauf aufsetzen (wie es lange Zeit nur Perl vorbehalten war); bei modernen Distributionen ist das im Desktop-Bereich bei grafischen Tools noch stärker der Fall.
Ich denke, Perl wurde wegen der schlechteren Wartbarkeit und "Mehrentwickler-Fähigkeit" für neue Software nicht mehr gewählt.
DanielH
User
Beiträge: 5
Registriert: Donnerstag 15. November 2007, 20:13

Leonidas schrieb:
[...] (wobei mein Editor automatisch bestimmte Zeilen einrückt, so dass
ich nur [Backspace] drücken muss, wenn ich mit dem Block fertig bin, um eine
Einrückungsebene zu verlassen) [...]
Ok, das ist dann natürlich sogar noch praktischer.

Gibs zu, du wolltest sowieso nur eine positive Meinung zu Perl hören, [...]
Nicht wirklich. Soll ich ehrlich sein? Zum Zeitpunkt, zu dem ich den Thread eröffnet
habe, war Python ganz klar mein Favorit. Allerdings hatte ich mich zu dem
Zeitpunkt nur allgemein über Python, Ruby, Perl und andere Script- /
Programmiersprachen informiert.

Je mehr ich mich über Dinge informiert habe, die ich später brauche, je geeigneter
kam mir Perl vor.

Und außerdem wäre ich wohl in einem Forum über Python falsch, wenn ich unbedingt
eine positive Meinung zu Perl hören wollen würde.

[...] das der Rest dir bereits gesagt hat wie man das ganze effizienter ohne
Threads lösen kann hat dich bisher nicht interessiert.
Mir geht es auch nicht darum, ob es funktioniert, sondern womit es am besten
funktioniert (siehe Thread-Überschrift ;) ). Und ich hab den Eindruck, dass Perl besser
geeignet ist.

Darüber hinaus gibt es aber noch einige andere Punkte, weshalb ich mich für Perl
entschieden habe (z. B. weil ich so bereits ein fast fertiges Script habe, bei dem ich
nur ein paar Änderungen machen muss / vermutlich werde ich viel mit RegEx arbeiten
müssen, und Python verwendet ja den engine von Perl, was langsamer sein dürfte / ...)

Du hast dir nicht einmal den von mir verlinkten Artikel angeschaut.
Also in erster Linie hatte ich mich zwar zu dem Thema in Sachen php informiert (wegen:
"Natürlich kannst du das auch mit PHP, Perl oder Ruby machen..."), aber natürlich habe ich
mir auch die Artikel angesehen.

"Meinst du forken?" hab ich gefragt, weil ich bei php nichts anderes
gefunden habe, was mit Multiprocessing zu tun haben könnte, nicht weil ich mir nicht die
Artikel durchgelesen habe.

Aber Apropos: ein anderer Punkt gegen Python war, dass mein Provider Python offiziell
nicht unterstützt (momentan hab noch „normalen“ Webspace). Inoffiziell könne ich zwar
Python-Scripte über CGI laufen lassen, aber sie würden keinen Support für Python
anbieten (welchen ich momentan ganz sicher brauchen würde).

Und dadurch, dass ich nur Webspace hab, kann ich 'Parallel python' sowieso vergessen,
bis ich mir nen eignen Server hole oder den Webhoster wechsle (weil soweit ich mich
erinnere, muss 'Parallel python' installiert werden, was ich ja vermutlich ohne root
Rechte vergessen kann).


BlackJack schrieb:
Ich denke Du machst Dir viel zu viele unnötige Gedanken um Threads und
Performance.
Das könnte stimmen ;)

Aber lieber mache ich mir zu viele Gedanke, als zu wenige (z. B. wie als ich entschieden
habe php zu lernen...)

Auf der anderen Seite sind alle genannten Sprachen (Perl, PHP, Ruby, Python) bei
wirklich CPU-lastigen Aufgaben "ungeeignet", da helfen auch keine Threads, da will man
C/C++/Fortran verwenden bzw. Code in diesen Sprachen mit der höheren Sprache
verbinden. Bei Python ist das klassische Beispiel das `numpy`-Paket für schnelles
Rechnen mit mehrdimensionalen Arrays.
Ja, stimmt, darüber hab ich mir auch schon gedankten gemacht, bzw. habe ich mich
informiert. Allerdings wäre es mir erstmal zu viel C/C++ zu lernen.

Wo Perl hier (vielleicht) noch einen Vorteil hat, ist dass es für Perl anscheinend einen
Compiler gibt, mit dem man Perl-Code in C- oder Assembler-Code
compilieren/konvertieren kann (Wobei das wohl auch nicht das Gelbe vom Ei ist;
aber für wenige Codezeilen funktioniert es vielleicht).

Perl, Ruby und Python sind alle geeignet für "Internetprogramme". Such Dir die
Sprache aus, die Dir am ehesten zusagt.
Ich denke Du hast Recht. Ich hab beschlossen einfach die Basics von beide
Scriptsprachen zu lernen. Dann kann ich am besten entscheiden, ob ich die eine, die
andere oder vielleicht sogar bei Scriptsprachen „richtig“ lernen möchte (eigentlich
spricht ja nichts dagegen beide Sprachen zu lernen, oder?).

Ich hätte sogar schon zwei Ideen, für die Python wesentlich besser geeignet wäre als
Perl. (Einmal ein Programm, was neben dem Desktop auch auf PDAs laufen soll, und
einmal ein Programm, was ich als „open source“ veröffentlichen möchte).
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

hier noch kleiner Hinweis falls du darauf noch nicht gestoßen bist: www.perlboard.de :roll:
Antworten