deutsch

Performance-Optimierung von Jython und Django

Im Rahmen eines laufenden Projektes befassen wir uns mit der Performance-Optimierung von Jython. Hintergrund ist die Integration von Django in eine Java-Umgebung auf der Basis von Apache Tomcat.

Bei Jython handelt es sich um eine Umsetzung von Python in Java, welche als Bindeglied zwischen diesen Sprachen dient. In diesem Zusammenhang erweist sich die Erweiterung django-jython als sehr nützlich für das Deployment und den Datenbankzugriff von Django-Projekten. Mit django-jython kann ein Projekt einschließlich zugehöriger Bibliotheken über einen Django Management Command in eine .war-Datei kompiliert werden. Für das Deployment wird diese Datei nur noch dem Anwendungsserver – hier Apache Tomcat – übergeben.

Bei der Entwicklung für unser Projekt stellten wir wesentliche Geschwindigkeitsunterschiede zwischen Python und Jython fest. Das Laden einer Referenzseite mit umfangreichen Datenbankoperationen dauerte mit Python 1.5, mit Jython ganze 11 Sekunden. Somit lag die Notwendigkeit einer Optimierung der Geschwindigkeit auf der Hand. Unsere Maßnahmen und Erkenntnisse auf diesem Weg wollen wir in diesem und nachfolgenden Blogeinträgen weitergeben.

Ausgangspunkt für die Optimierung ist ein System in der Konfiguration Apache Tomcat 6.0.20, Jython 2.5.1 und Django 1.1. Um nicht in der Vergangenheit zu optimieren, wechselten wir Jython von stable auf trunk aus – die letzte veröffentlichte Version stammte vom September 2009. Zunächst wollte unser Django-Projekt nicht auf trunk laufen, Fehlermeldung:

java.lang.NoSuchMethodError: org.python.core.Py.makeClass(Ljava/lang/String;[Lorg/python/core/PyObject;Lorg/python/core/PyCode;Lorg/python/core/PyObject;)Lorg/python/core/PyObject;

Nach Identifikation des verursachenden Commits erwies sich der vermeintliche Bug als eine Änderung im Jython-Compiler. Für die Neukompilierung des Quellcodes mussten alle vorhandenen .class-Dateien gelöscht werden. Leichte Übung.

Die Umstellung von Jython stable auf trunk reduzierte die Laufzeit von besagten 11 auf immerhin 6 Sekunden. Nun konnte es an die eigentliche Optimierung gehen. Mehr dazu im nächsten Blogeintrag.

Tags: , , , , , , , , , , , ,

This entry was posted on Monday, April 12th, 2010 at 6:19 pm and is filed under Django, Python. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

TSCHITSCHEREENGREEN live » Blog Archive says:

[...] « Performance-Optimierung von Jython und Django [...]

April 14th, 2010 at 2:49 pm

TSCHITSCHEREENGREEN live » Blog Archive says:

[...] Systemlandschaften mittels Jython. Die Beherrschung dieses Themas insbesondere in Bezug auf Performance ebnet den Weg für Django-basierte Portalentwicklung in großen Unternehmen, a.k.a. the clients [...]

May 25th, 2010 at 3:35 pm

Leave a Reply