Open Source im professionellen Einsatz

Newsletter abonnieren
Seite durchsuchen

HEFTARCHIV | NEWS | E-BIBLIOTHEK | VIDEO | BLOGS | WHITEPAPER | EVENTS | ACADEMY | ABO | SHOP

user friendly

  Home  »  Online Artikel  »  Das Python-Framework Kamaelia in Version 0.6  

RSS-Feed der aktuellen News von Linux-Magazin Online Folgen Sie Linux-Magazin Online auf Twitter
Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark

BBC veröffentlicht Kamaelia 0.6

Grinsekatze

von Michael Sparks
 

Nach dem Willen der Prozessorherstellern müssen nun alle umlernen: Parallelprogrammieren wird das Paradigma der Zukunft. Dass das auch einfach geht, zeigt Kamaelia, ein Komponenten-Framework in Python. Eben ist die Version 0.6 erschienen.

Multicore-Ausstattung wird bei neuen Computern immer mehr zur Normalität. Prozessoren mit zwei, vier oder gar 80 Kernen sind bereits auf dem Markt. Die Hersteller schicken ihre neuen Produkte mit der Devise auf die Reise, dass die Programmierer schlauer werden müssen, um diese neue Architektur auch ausnutzen zu können.

Gleichzeitiges

Dabei machen genau die gleichen Programmierer im richtigen Leben jeden Tag hunderte von Sachen gleichzeitig. Selbst im Internet programmierern sie Mashups von mehreren Websites, die auch funktionieren, obwohl die Webservices parallel laufen.

Kamaelia wurde von der Forschungsabteilung des britischen Rundfunks BBC mit diesen Problemen und Ideen im Hintergrund entwickelt. Das wesentliche Ziel ist, den Aufbau großer paralleler Systeme dem Problem angemessen, einfach, und leicht wartbar zu machen. Oft genug ist die am besten zu einem Problem passende Lösung hoch parallel und eignet sich deshalb auch gut für Multicore-Systeme. Einige Hinweise zur Kamaelia-Installation gibt der gleichnamige Kasten.

Kamaelia-Installation

Am einfachsten laden Sie sich die Kamaelia-Distribution als Tar.gz-Datei herunter, entpacken Sie, wechseln in das Verzeichnis und geben dann als Administrator ein:

python setup.py install

Für die Unterstützung des digitalen TV-Standards benötigen Sie zusätzlich das Paket »python-dvb3«, das Sie am besten aus dem Subversion-Repository auschecken -- die Version aus dem Tar.gz-Paket ließ sich nicht kompilieren. Für Python-DVB brauchen Sie wiederum »python-pyrex«. Damit die Übersetzung klappt, muss die DVB-Entwicklungsbibliothek »libdvb-dev«installiert sein.

Das Anwendungsfeld von Kamaelia ist von Haus für parallele Verarbeitung prädestiniert, weil es bei der BBC oft um die Verteilung von Multimediainhalten im Netz geht, zum Beispiel 20 Millionen Menschen, die gleichzeitig dasselbe Programm ansehen. Kamaelia ist einerseits ein Experimenti erkasten, um Lösungen für Probleme dieser Art auszuprobieren, aber es ist auch für hohe Performance entworfen.

Wie Unix-Pipes

Prinzipiell folgt Kamaelia dem Unix-Pipes-Ansatz, aktualsiert ihn aber für die objektorientierten, modernen Zeiten. Kamaelias Grundsätze sind (mit einer Entschuldigung an Doug McIlroy): Schreibe Komponenten, die

  • eine Sache tun, und sie richtig tun,
  • gut zusammenarbeiten,
  • als allgemeine Schnittstelle Python-Objekte verarbeiten.

Ein einfaches Beispiel eines Kamaelia-Systems zeigt Listing 1. Die erste Pipeline realisiert mit zwei Komponenten einen kleinen Server. Die erste liest ein Videodatei im freien BBC-Codec Dirac, die zweite stellt den Server selbst zur Verfügung. Die zweite Pipeline setzt aus einem TCP-Client, einem Dirac-Decoder, einer Regelungs- und einer Anzeige-Komponente einen Streaming-Client zusammen. Ein solches Netzwerk verschalteter Komponenten zeigt Abbildung 1.

Listing 1: Dirac-Streaming

01 Pipeline(
02   ReadFileAdaptor( filename = 'video.drc',
03                    bitrate = 400000 ),
04   SingleServer(),
05 ).activate()
06 
07 Pipeline(
08     TCPClient( host = "127.0.0.1",
09                port = 1601 ),
10     DiracDecoder(),
11     MessageRateLimit( messages_per_second = 15,
12                       buffer = 15 ),
13     VideoOverlay(),
14 ).run()

Um zu verstehen, was eine Komponente ist, zuerst ein einfaches Beispiel. Die folgenden Zeilen lesen in einer Schleife Strings von der Standardeingabe und geben sie über die Standardausgabe aus:

import sys
eol = "\n"
while 1:
  line = raw_input(">>> ")
  line = line + eol
  sys.stdout.write(line)
  sys.stdout.flush()

Kamaelia ersetzt die Standardausgabe durch eine so genannte Outbox und packt den Code in die Main-Methode einer Klasse. Diese erbt von »threadedcomponent«, damit die blockierende Methode »raw_input« nicht das ganze Programm zum Halten bringt. Zum Ausgeben genügt eine Methode ohne Threads, die die Ausgabewerte über ihre Inbox erhält. Eine Pipeline verbindet wieder Ein- und Ausgabemodul. Listing 2 zeigt beide Klassen und die Pipeline.

Listing 2: Einfache Ein- und Ausgabe

01 from Axon.ThreadedComponent import threadedcomponent
02 from Axon.Component import component
03 from Kamaelia.Chassis.Pipeline import Pipeline
04 import sys
05 
06 class ConsoleReader(threadedcomponent):
07    def main(self):
08       eol = "\n"
09       while 1:
10          # this blocks so we use a thread
11          line = raw_input(">>> ")
12          line = line + eol
13          self.send(line, "outbox")
14 
15 class ConsoleEchoer(component):
16    def main(self):
17       while 1:
18           while self.dataReady("inbox"):
19               data = self.recv("inbox")
20               sys.stdout.write(str(data))
21               sys.stdout.flush()
22           yield 1
23 
24 Pipeline( ConsoleReader(),
25            ConsoleEchoer(),
26         ).run()

Wichtig ist Zeile 22 mit der Anweisung »yield 1«. Sie zeigt an, dass es sich bei dieser Methode -- wie bei den meisten Kamaelia-Methoden -- um einen Generator handelt.

Dass Parallelverarbeitung in der echten Welt so gut funktioniert, haengt unter anderem damit zusammen, dass jedes Ding zu einer Zeit nur an einem Ort sein kann. Ähnlich funktionieren die In- und Outboxes von Kamaelia. Wer etwas über seine Inbox erhält, kann damit tun, was er will, und es dann in die eigene Outbox stecken. An dieser Stelle hat man das Objekt praktisch freigegeben. Dieses Modell vermeidet von Anfang an, dass mehrere Programmteile sich konkurrierend um einen Objektzustand bemühen: Etwas aus einer Inbox zu nehmen bedeutet implizit, ein Lock für das Objekt zu erhalten. Etwas in eine Outbox zu stecken, gibt das Lock implizit wieder frei. Gleichzeitig bedeutet das, dass jedes Datum zu einer bestimmten Zeit nur je einen Leser und Schreiber besitzt. Diese Grundprinzipien machen den sicheren Aufbau von Kamaelia-Systemes verhältnismäßig leicht.

Diesen Artikel druckenDiesen Artikel weiterempfehlen Diesen Artikel kommentieren Newsletter abonnieren
Share/Bookmark
Ähnliche Artikel
Die Viererbande KDE-Entwicklertreffen Akademy 2006 in Dublin
Open Source All Stars O'Reillys Entwicklerkonferenz OSCON
Offenes Grün Praxistest: Endian Firewall Macro X2
Fenster mit Aussicht Linux fürs Windows-Deployment
Zartes Pflänzchen Metadaten in Gnome
Wende auf dem Desktop? Der Monat auf Linux-Community.de
Whitepaper
The Role of Open Source in Data Integration

Obwohl in den letzten Jahren viele technische Fortschritte erzielt werden konnten, verfügen die meisten Datenintegrationsprozesse nach wie vor nur über eine sehr begrenzte Automatisierung. Das vorliegende White Paper von dem Industry Analyst Mark Madson wird zunächst ein grundlegendes Verständnis von Daten Integration vermitteln, die Vorzüge von Open Source Lösungen für Daten Integration erläutern und Ihnen professionelle Empfehlungen geben, damit Sie Ihre Integrationsjobs noch einfacher und produktiver gestalten können.

Download PDF (Registrierung erforderlich)
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele (Folge 2)

Der zweite Teil des Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele White Papers beleuchtet anhand weiterer ausgewählter Case Studies die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.

Download PDF (Registrierung erforderlich)
Kommentare (0)