Drahtlose Netzwerke sind überall: Zu Hause, im Café und in der Firma. Im Gegensatz zu Kabelnetzen verliert der Admin bei WLANs allerdings schnell die ... (mehr)

Multiprocessing-Modul bequem

Mit der Parallel-Klasse bietet Joblib im Wesentlichen eine bequeme Schnittstelle für das zu Python gehörige Modul »multiprocessing« . Es unterstützt die gleiche Funktionalität, aber die Kombination von Parallel und »delayed()« reduzieren den Implementationsaufwand einfacher Parallelisierungsaufgaben auf eine Zeile. Dazu gibt es Statusausgaben und Konfigurationsmöglichkeiten mit jeweils einem Argument.

Im Gedächtnis

Das vorherige Beispiel bediente sich einer kleinen und praktisch sinnlosen Funktion »f(x)« . Ob parallelisiert oder nicht, manche Funktionen erledigen hingegen sehr Zeit- und Ressourcen-aufwendige Berechnungen. Sind die Eingabewerte vor dem Programmstart unbekannt, verarbeitet eine solche Funktion womöglich mehrfach dieselben Argumente; möglicherweise ein unnötiger Aufwand.

Es liegt bei aufwendigeren Funktionen also nahe, deren Ergebnisse abzuspeichern (Memorization). Für den Fall, dass sie mit demselben Argument aufgerufen wird, greift sie so direkt auf das Ergebnis zurück, statt es erneut auszurechnen. Auch hier greift Joblib dem Programmierer mit der Klasse »Memory« unter die Arme.

Sie stellt eine Methode »cache()« bereit, die als Decorator für beliebige Funktionen mit einem oder mehreren Funktionsargumenten dient. Ergebnisse der so dekorierten Funktion speichert das Memory-Objekt dann auf der Festplatte ab; beim nächsten Aufruf prüft sie, ob das gleiche Argument oder die gleichen Argumente bereits verarbeitet wurden und liefert gegebenenfalls direkt das Ergebnis aus ( Abbildung 2 ). Listing 3 zeigt eine Implementation, wieder mit einer primitiven Beispielfunktion »f(x)« .

Listing 3

Funktionsergebnisse speichern

 

Abbildung 2: Memory speichert Funktionsergebnisse ab und liefert sie bei erneuter Anfrage aus, ohne nachzurechnen.

Die berechneten Ergebnisse landen auf der Festplatte im Verzeichnis »joblib« unterhalb des mit dem Parameter »cachedir« definierten Verzeichnisses. Darin erhält jede memorisierte Funktion wieder ein eigenes Unterverzeichnis, das unter anderem in der Datei »func_code.py« den Original-Python-Quellcode der Funktion enthält.

comments powered by Disqus
Einmal pro Woche aktuelle News, kostenlose Artikel und nützliche ADMIN-Tipps.
Ich habe die Datenschutzerklärung gelesen und bin einverstanden.

Konfigurationsmanagement

Ich konfiguriere meine Server

  • von Hand
  • mit eigenen Skripts
  • mit Puppet
  • mit Ansible
  • mit Saltstack
  • mit Chef
  • mit CFengine
  • mit dem Nix-System
  • mit Containern
  • mit anderer Konfigurationsmanagement-Software

Ausgabe /2023