Fragen zur Performanceverbesserung

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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich meine in wäre besser. Also mal nachgesehen:

Code: Alles auswählen

def test_has_key():
    """Stupid test function"""
    d = {"abc": 1}
    for i in xrange(10):
        d.has_key("abc")
        d.has_key("nein")

def test_in():
    """Stupid test function"""
    d = {"abc": 1}
    for i in xrange(10):
        "abc" in d
        "nein" in d

if __name__ == '__main__':
    from timeit import Timer
    t = Timer("test_has_key()", "from __main__ import test_has_key")
    print "has_key:", t.timeit()

    t = Timer("test_in()", "from __main__ import test_in")
    print "in:", t.timeit()
Ausgabe:

Code: Alles auswählen

has_key: 2.53848695257
in: 1.52560327654
Bin mir nicht sicher, ob eine Datenbank wirklich schneller ist. Wenn es darum geht, das man eine Zeile immer in Relation zur vorherigen analysiert. Wo soll da eine Datenbank das ganze beschleunigen?

Warum werden eigentlich die Zeilen per ctypes aufgebröselt? Wie sehen die denn wirklich aus? Tut's auch eine einfaches line.split(" ") ?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
seppi
User
Beiträge: 12
Registriert: Dienstag 30. August 2011, 13:20

jens hat geschrieben:Ich meine in wäre besser. Also mal nachgesehen:

Code: Alles auswählen

def test_has_key():
    """Stupid test function"""
    d = {"abc": 1}
    for i in xrange(10):
        d.has_key("abc")
        d.has_key("nein")

def test_in():
    """Stupid test function"""
    d = {"abc": 1}
    for i in xrange(10):
        "abc" in d
        "nein" in d

if __name__ == '__main__':
    from timeit import Timer
    t = Timer("test_has_key()", "from __main__ import test_has_key")
    print "has_key:", t.timeit()

    t = Timer("test_in()", "from __main__ import test_in")
    print "in:", t.timeit()
Ausgabe:

Code: Alles auswählen

has_key: 2.53848695257
in: 1.52560327654
Bin mir nicht sicher, ob eine Datenbank wirklich schneller ist. Wenn es darum geht, das man eine Zeile immer in Relation zur vorherigen analysiert. Wo soll da eine Datenbank das ganze beschleunigen?

Warum werden eigentlich die Zeilen per ctypes aufgebröselt? Wie sehen die denn wirklich aus? Tut's auch eine einfaches line.split(" ") ?
ctypes verwende ich aufgrund der Datentypenumwandlung. Die Zeitstempel benötige ich als int, damit ich sie gleich zur Differenz verwenden kann und keine Datentypkonvertierung in Python vornehmen muss. Eine Zeile sieht so aus wie ich es im letzten Kommentar geschrieben habe. line.split(" "), würde in den meisten Fällen gehen jedoch gibt es auch einige Ausnahmefälle. Außerdem habe ich beides probiert und ctypes war bei mir deutlich schneller.
deets

jens hat geschrieben: Bin mir nicht sicher, ob eine Datenbank wirklich schneller ist. Wenn es darum geht, das man eine Zeile immer in Relation zur vorherigen analysiert. Wo soll da eine Datenbank das ganze beschleunigen?
Datenbank war sehr weit gemeint, gar nicht speziell SQL. Aber wenn es um Beschleunigung durch parallelisierung geht, dann geht das nunmal nur mit multi-process, und damit brauchst du einen externen Service, der dir sagt, ob eine bestimmte Zeile vorhanden ist, was ihre Werte sind usw. Das kann auch nur ein einziger Prozess sein, der diese Frage beantwortet, zB der Parent. Aber irgendsowas braucht man.
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Eine Alternative wäre u. U. auch Umschreiben in hf5 und der Gebrauch von PyTables. Von der bisher beschriebenen Datenstruktur her *könnte* das sinnvoll sein.

Nur: Können wir weiter spekulieren ohne Code zu sehen?
seppi
User
Beiträge: 12
Registriert: Dienstag 30. August 2011, 13:20

Code kann ich leider nicht veröffentlichen.
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Was mich interessieren würde: Ob eine pure PyPy-Anwendung nicht schneller wäre.
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
seppi
User
Beiträge: 12
Registriert: Dienstag 30. August 2011, 13:20

jbs hat geschrieben:Was mich interessieren würde: Ob eine pure PyPy-Anwendung nicht schneller wäre.
Hi jbs,
Ich habe mir gerade mal Pypy angeschaut und installiert. Aber mein Programm hat eine GUI basierend auf dem wxPython Wrapper, mit der neuesten PyPy version sollte das doch aber eigentlich möglich sein. ("Pypy 1.5 supports C-Code")
Gibt es da irgendein Installer/Package für pypy, das ich bisher noch nicht gefunden habe? Bisher bekomme ich die Fehlermeldung "No module named wx".
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Um zu sehen, ob es überhaupt was bringt, mach doch erstmal ein test skript, ohne GUI...

Hast du PyPy in einer virtualenv gesteckt? Kannst ja mal ein pip install wx probieren?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

@seppi: Gibt es eigentlich irgendwelche Neuigkeiten dazu?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten