2009-10-29

Exceptions in Python sind langsamer als gedacht

Heute habe ich mal wieder ein Python Aha Erlebnis gehabt. Beim Optimieren einer Klasse habe ich ein paar Benchmarks zum Theme dict() Zugriff und Exception Handling durchgeführt.

Kurz gesagt, brauche ich eine Funktion, die ein Key in mehreren dicts sucht.


Klassisch in Python implementiert man das so:

def get_from_dict_list(dict_list,k):
    for d in dict_list:
        try:
            return d[k]
        except KeyError:
            pass
    return None
Eine alternative Implementation is

def get_from_dict_list(dict_list,k):
    for d in dict_list:
        if k in d:
            return d[k]
    return None
Die erste Methode wird normalweise bevorzugt. Dies hat zwei Gründe: Zum einen gilt der Spruch: "it's easier to ask forgiveness than permission" und exception handling ist ein integraler Bestandteil der Sprache. Zum anderen hat die zweite Methode potentielle Race-Conditions und kann eine unerwartete Exception werfen wenn k aus d gelöscht wird, während die Methode abgearbeitet wird.

Für den Fall, das der Key gleich im ersten dict gefunden wird, ist die erste Methode sogar leicht schneller. Falls aber das Exception Handling getirggert wird, wird es richtig langsam. Auf meinem Laptop liefert timeit einen Faktor von 10(!) zwischen den beiden Methoden, zugunsten der zweiten. Das Exception abfangen und ignorieren kostet auf meinem Laptop 4 Mikrosekunden

2007-04-22

Buch: The Apache Modules Book

Nach langer Wartezeit ist endlich The Apache Modules Book von Prentice Hall herausgekommen.

Das ist das zweite Buch zum Programmieren von Apache Modulen und das erste Buch für die Apache 2.x Reihe.
Wenn das 3-5 Jahre früher 'rausgekommen wäre, hätte es mir viel Arbeit und Lesen von Apache Source Code gespart. Das Buch füllt definitiv eine Lücke, wobei ich mir ein paar mehr "Advanced Topic" Examples wie zum Beispiel "Connection Pooling" in threaded application gewünscht hätte. Dafür hätte man dann die 150 Seiten HTTP/1.1 Reference weglassen können.

2006-08-18

Buch: History of Programming Languages

Ich hatte mich endlich durchgerungen und bei Alibris das Buch History of Programming Languages bestellt. Hierbei handelt es sich um die Proceedings und die Transkriptionen der ersten Konferenz gleichen Namnens von 1978, heutzutage aufgrund ihrere Bedeutung einfach nur noch als HOPL Konferenz bezeichnet.
Das Teil ist echt lesenswert: Hier erfährt man die Geschichte von den Leuten, die in der Computersteinzeit die ersten Compiler geschriebene haben.