Python Tempo

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.
Tester

Python Tempo

Beitragvon Tester » Sonntag 21. August 2005, 09:57

Hallo

habe gerade vor ein paar Tagen Python kennengelernt -- grossartig!

Endlich eine kleine Sprache mit einfacher Syntax, die einem einerseits
die Bits- und Pointer-Pfriemelei von C/C++ erspart, andererseits
portable GUI-Programmierung bietet und höhere Datenstrukturen wie
Dictionaries und Bignums mit eingebaut hat.

Nur eines irritiert mich bei aller Begeisterung etwas bei meinen ersten Python-Experimenten:

Ein Apfelmännchen in Briefmarkengröße benötigt zur Berechnung bei mir
etwa eine Minute, also genauso lang wie das entsprechende Amiga-Basic
-Programm vor 20 Jahren auf einer Maschine, die zweitausendmal weniger
Speicher als mein PC hatte und fünfhundertmal langsamer getaktet war.

Ist das symptomatisch für Python ?
Grüße
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Beitragvon Clython » Sonntag 21. August 2005, 10:16

Python ist schon langsamer als C(++) und Java, da die Sprache interpretiert ist. Aber dass das Rendern eines Apfelmännchens 1 Minute dauern soll, ist schon komisch. Vielleicht würde es helfen, wenn du mal den Code posten würdest. Ich bin zwar nicht so das Python-Genie, aber die Genies auf dem Board werden dir sicher sagen können, ob etwas uneffektiv gecodet ist, oder es sonst ein Problem gibt.
ProgChild
User
Beiträge: 210
Registriert: Samstag 9. April 2005, 10:58
Kontaktdaten:

Beitragvon ProgChild » Sonntag 21. August 2005, 11:26

Ich hab hier einen Artikel, darüber, wie du dein Python Programm auf Geschwindigkeit hin optimierst.
Tester

re

Beitragvon Tester » Sonntag 21. August 2005, 12:14

Es ist die Tkinter-Version des Apfelmännchens aus der Abteilung
"snippets".

Danke für den Link zum Thema "Python Speed-up".

Inzwischen habe ich einige weitere Tests gemacht, denen zufolge
reine Rechenaufgaben mit großen Zahlen erstaunlich schnell gehen -
Fakultät von 100000 usw... - vielleicht ist es das Tkinter, das bei
Grafik-Ausgabe bremst.
Turtle ist ja auch nicht so arg schnell.

Grüße
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Re: re

Beitragvon gerold » Sonntag 21. August 2005, 12:48

Tester hat geschrieben:Es ist die Tkinter-Version des Apfelmännchens aus der Abteilung "snippets".

Hi!

Verschiebe in diesem Beispiel den Befehl can.pack() eine Zeile oberhalb die Zeile root.mainloop(). Dann weißt du was so lange dauert.

http://www.python-forum.de/viewtopic.php?p=14097#14097

Grafikoperationen, die in Echtzeit auf dem Bildschirm angezeigt werden, brauchen generell lange, da dadurch eine sehr komplexe Maschinerie in Gang gesetzt wird. Man kann dieses Verhalten aber abfangen, indem man entweder die Grafik im Hintergrund zeichnet und wenn sie fertig ist, in den Vordergrund holt, oder indem man die Bildschirmaktualisierung jeweils für ein paar zehn/hundert Iterationen sperrt.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Re: Python Tempo

Beitragvon jens » Sonntag 21. August 2005, 16:19

Tester hat geschrieben:Ein Apfelmännchen in Briefmarkengröße benötigt zur Berechnung bei mir etwa eine Minute

Du hast wohl dieses Skript genommen:
http://www.python-forum.de/viewtopic.php?t=2552

oder?

Dabei wird eigentlich keine Grafik erzeugt. Es wird mit Text-Punkten, z.B.: can.create_text(x,y,fill='black',text='.') gearbeitet. Das über TKinter, ist sehr lahm... Die eigentliche Berechnung ist wesendlich schneller!
Normalerweise ist er bei mir (SIZE = 100) in ca. 24Sec fertig. Wenn man den ganzen IF-Block auskommentiert in dem der Punkt gezeichnet wird, ist er schon in 0.35Sec fertig!

In unserer Python-FAQ findest du übrigends für den Einstieg einige Informationen: http://www.pythonwiki.de/PythonDeForum/Faq

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Tester

Danke

Beitragvon Tester » Sonntag 21. August 2005, 18:15

Vielen Dank für Eure Tips!

Aha -- mit 0.35s sieht das natürlich schon gaaaanz anders aus...

Was meint Ihr so zur Zukunft von Python ?
Wird sich Python wohl gegen PERL und Ruby durchsetzen und auch in einigen Jahren noch aktuell sein ?
Zu wünschen wäre das ja.
Grüße
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Beitragvon henning » Sonntag 21. August 2005, 18:45

Ins blaue geraten würd ich sagen: ja.
Der Hauptgrund für diese Behauptung ist, dass Python
eine --finde ich-- wesentlich intuitivere Syntax und struktur bietet.
Auch wenn ruby coole features hat, man muss sich da erstmal sehr hineindenken.
Von PERL-Code, den ich zuweilen kaum von Binarys unterscheiden kann ganz zu schweigen ;-)

Wobei es erfahrungsgemäß nicht so sein wird, dass PERL oder Ruby verschwinden werden. Eigentlich wächst die Zahl der Programmiersprachen ja ständig, was in mancherlei Hinsicht auch wieder schade ist :-/
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Sonntag 21. August 2005, 18:55

Hi!

@jens: 0.35s? Zeigst Du bitte mal den Code mit dem Du das erreichst.

Zum speed allgemein:
Python ist eine Scriptsprache und damit zwangsweise langsamer als compilierte Sprachen. Andererseits gibt's für heftiges number crunching ja so nette Module wie Numeric, numarray, SciPy, ... die für einen gehörigen Performanceschub sorgen :) Es ist eigentlich auch kein Problem die performancekritischen Teile eines Programms in C oder Fortran zu schreiben und in das Programm einzubinden.

Zur Zukunft: Kann man die in der IT-Welt überhaupt halbwegs sinnvoll vorrausagen?
Welche Sprache sich durchsetzen wird, hängt zu einem grossen Teil von der dahinterstehenden Community ab. Was wäre z.B. Perl ohne CPAN? Perl 6 kommt ja auch bald raus (ha, der war gut :)). Mal sehn wie das wird.
Python und Ruby sind derzeit in aller Munde. Für mich hat Python klar die Nase vorn, weils schon länger da und viel weiter verbreitet ist. Die Gründe von Python zu Ruby zu wechseln sind nicht wirklich so gravierend (wenn überhaupt vorhanden) wie z.B. von Perl zu Python. Module wie die von mir oben genannten gibt's in Ruby z.B. gar nicht.

Gruß, mawe
Clython
User
Beiträge: 151
Registriert: Samstag 21. August 2004, 13:58
Wohnort: Schweiz, BE-2500

Beitragvon Clython » Sonntag 21. August 2005, 19:50

Kommt noch hinzu, dass der Perl-Vater (Wall oder so?) jetzt ein ähnliches Konzept brauchen will wie Java, eine virtual Machine und das auf die länge diese Machine (genannt Parrot), dann auch Python und Ruby Code ausführen können soll. Es ist also anzunehmen, dass sich die Perl und die Python Welt noch weiter nähern werden.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 22. August 2005, 06:31

mawe hat geschrieben:@jens: 0.35s? Zeigst Du bitte mal den Code mit dem Du das erreichst.


Wie gesagt, ich hab nur den ganzen IF-Block auskommentiert:

Code: Alles auswählen

from Tkinter import *

import time
StartTime = time.time()

SIZE = 100
LEFT = -2
RIGHT = 0.5
TOP = 1.25
BOTTOM = -1.25
ITERATIONS = 20

root = Tk()
can = Canvas(width=SIZE,height=SIZE)
can.pack()

for y in range(SIZE):
    for x in range(SIZE):
        z = complex(0,0)
        c = complex(LEFT+x*(RIGHT-LEFT)/SIZE, TOP+y*(BOTTOM-TOP)/SIZE)
        norm = abs(z)**2
        for count in range(ITERATIONS):
            if norm <= 4.0:
                #z = complex(z.real*z.real - z.imag*z.imag + c.real, z.imag*z.real*2+c.imag)
                z=z*z+c
                #norm = abs(z)**2
                norm=abs(z*z)
            else:
                break
        #~ if count<=4:
            #~ can.create_text(x,y,fill='grey',text='.')
        #~ elif count<=8:
            #~ can.create_text(x,y,fill='green',text='.')
        #~ elif count<=10:
            #~ can.create_text(x,y,fill='blue',text='.')
        #~ elif count<=12:
            #~ can.create_text(x,y,fill='red',text='.')
        #~ elif count<=15:
            #~ can.create_text(x,y,fill='yellow',text='.')
        #~ else:
            #~ can.create_text(x,y,fill='black',text='.')

        root.update()

print "Dauer:",time.time()-StartTime

root.mainloop()


Zur Zukunft: Ich denke nicht das Python irgendwann sterben wird. Es steckt halt keine Firma hinter dem ganzen, die irgendwann vielleicht Pleite ist und die Software verschwindet. Es ist OpenSource...
Gegenüber den neuen wie Ruby, hat Python klar die Nase vorn! Das zeigt sich auch bei den Webserver. Python ist viel öfter per CGI dabei als Ruby! Außerdem ist Python unter Linux immer wichtiger geworden. Einige Essenstielle Programme sind in Python realisiert.
Für die Verbreitung spricht außerdem die gute Verfügbarkeit von fertigen Module für alle möglichen Bereiche...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Tester

re

Beitragvon Tester » Montag 22. August 2005, 20:53

Ja, Ruby scheint international (noch?) keine große Rolle zu spielen, obwohl
Ruby in Japan ja sehr beliebt sein soll.


Ich habe mir auf der Suche nach einer Alternative zu den üblichen mir bekannten Standard-Sprachen zwecks "Rapid Prototyping" von kleinen bis mittleren Projekten eine ganze Reihe von Sprachen angesehen und ausprobiert, darunter (C,X)LISP(STAT),Scheme,Poly,ML,FORTH, APL, Javascript, Haskell, PERL, Python und eine Reihe kleinerer Sprachen;
letztendlich scheint mir Python im Großen und Ganzen das eleganteste und modernste Konzept zu sein, zumal man mit Python offensichtlich wahlweise prozedural, OO oder (in Grenzen) funktional programmieren kann -- alle
anderen Sprachen in der obigen Liste können nur einen oder zwei dieser 3 Programmierstile unterstützen.

Wenn ich mir nun ansehe, was Python implizit alles an Arbeit
für den Programmierer erledigt, dann ist es geradezu erstaunlich, wieviel
von dieser Arbeit bei anderen modernen Sprachen dem Programmierer aufgelastet
wird: C++ hat keine Garbage-Collection und man ist unter anderem noch selbst für den Copy-Constructor bei der "by value"-Argumentübergabe von Objekten bei Funktionsaufrufen verantwortlich. Warnung bei
nicht--initialisierten Variablen und Zeigern bei C++ ? Fehlanzeige.
Dafür gleich zwei verschiedene Methoden der "by reference"-Argumentübergabe (Zeiger und Referenzen)...
Hätte ich Python schon vor ein paar Jahren kennengelernt, dann hätte ich
mein letztes Projekt nicht in C++ durchgeführt, schätze ich mal :)


Na dann will ich ernsthaft hoffen, daß Python seine beste Zeit noch vor sich hat und nicht im "Neue-Programmiersprachen"-Trubel dieser Jahre verloren
geht.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Beitragvon mawe » Montag 22. August 2005, 21:07

Hi!

Ich will Dich keineswegs von Python abhalten (ganz im Gegenteil :)), aber schau Dir doch mal OCaml an. Es unterstützt die 3 von Dir erwähnten Programmierstile und bringt auch noch eine beachtliche Performance mit.

Gruß, mawe
henning
User
Beiträge: 274
Registriert: Dienstag 26. Juli 2005, 18:37

Beitragvon henning » Dienstag 23. August 2005, 08:42

Wenn wir schon so aus dem Topic entgleiten möchte ich auch gern nochmal Werbung für Dylan machen.
Das tolle an Dylan ist kurz gesagt: Man kann sowohl statisch typisieren (Also Typen von Variablen festlegen wie in C ==> Performance) oder dynamisch wie in Python (Also jede Variable kann Daten von jedem Typ annehmen).

Die Fälle lassen sich beliebig mischen und man kann den Code über C direkt zu binarys compilen die Geschwindigkeitsmäßig wohl mit C++ vergleichbar sind oder auch interpretieren.

http://www.gwydiondylan.org
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 23. August 2005, 09:28

Also da möchte ich gleich normal Werbung für Python machen, denn alle genannten Sprachen sind IMHO keine alternative für Python! Mit welcher kann man CGIs schreiben? Natürlich kann man theoretisch mit complilierten Binaries arbeiten, aber wenn man bei billigen Webspace Providern bleibt, dann führt kein weg an PHP oder Python vorbei. Nur mit Python kann man allerdings auch "normale" Programme realisieren...

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]