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)

Memory Mapping

Im Normalfall empfiehlt sich »mmap_mode='r+'« zur Aktivierung des Memory Mappings. Dieser Wert öffnet eine gegebenenfalls bestehende Datei und hängt an sie neue Daten an. Bei den anderen Modi schreibt Memory keine neuen Daten, sondern liest nur existierende aus der Datei aus ( »r« ) oder überschreibt die bestehenden Daten ( »w+« ). Mit »c« (copy-on-write) behandelt Memory die Datei auf der Platte wie mit »r« als unveränderbar, hält neue Zuweisungen aber dennoch im Speicher vor.

Wer statt Zeit vor allem Festplattenspeicher sparen muss, initialisiert das Memory-Objekt mit dem Argument »compress=True« . Damit komprimiert Memory die Funktionsergebnisse beim Speichern auf die Festplatte. Allerdings schließt das die Möglichkeit zum Memory Mapping aus.

Schließlich bietet auch die Memory-Klasse die Möglichkeit, Statusmeldungen auszugeben. Ihr Konstruktorparameter »verbose« steht standardmäßig auf 1, damit gibt »cache()« bei jedem Aufruf einer memorisierten Funktion eine Statusmeldung aus, wenn sie ein Ergebnis neu berechnet. Setzt man »verbose=0« , bleiben diese mitunter sehr zahlreichen Statusberichte aus. Setzt man den Wert hingegen höher, berichtet Memory bei jedem Aufruf der Funktion, ob das Ergebnis in einer Datei vorliegt oder neu berechnet wird.

Zu guter Letzt nimmt »cache()« mit dem Parameter »ignore« eine Liste von Funktionsargumenten entgegen, die es beim Memorisieren ignoriert. Das bietet sich an, wenn einzelne Funktionsargumente nur die Bildschirmausgabe beeinflussen, aber nicht das Funktionsergebnis. Listing 4 zeigt die Funktion »f(x)« mit dem Zusatzargument »verbose« , dessen Wert für den Rückgabewert der Funktion keine Rolle spielt.

Listing 4

Einzelne Argumente ignorieren

 

Auf die Platte

Schließlich bietet Joblib noch zwei Funktionen zum Speichern und Laden von Python-Objekten: »joblib.dump()« und »joblib.load()« . Sie kommen auch in der Memory-Klasse zum Einsatz, funktionieren jedoch auch unabhängig davon und ersetzen die von Pythons »pickle« -Modul angebotenen Mechanismen zur Serialisierung von Objekten durch häufig effizientere Methoden. Insbesondere große Numpy-Arrays speichert Joblib platzsparend und schnell ab.

»joblib.dump()« nimmt ein beliebiges Python-Objekt und einen Dateinamen als Argumente entgegen, ohne weitere Angaben landet das besagte Objekt in der angegebenen Datei. »joblib.load()« , mit demselben Dateinamen aufgerufen, stellt dieses Objekt wieder her:

import joblib
x = ...
joblib.dump(x, 'file')
...
x = joblib.load('file')

Wie Memory kennt auch »dump()« den optionalen Parameter »compress« . Hier steht eine Zahl von 0 bis 9, die den Kompressionsgrad angibt; 0 bedeutet gar keine Komprimierung, 9 verbraucht den wenigsten Plattenspeicher, aber auch am meisten Zeit. In Kombination mit »compress« legt außerdem das Argument »cache_size« fest, wie viel Arbeitsspeicher Joblib verwendet, um Daten darin zunächst schnell zu komprimieren, bevor es sie auf die Festplatte schreibt. Der angegebene Wert beschreibt die Größenordnung in MByte; es handelt sich jedoch lediglich um eine Schätzung, die Joblib bei Bedarf überschreitet, etwa bei sehr großen Numpy-Arrays.

Das »dump()« -Komplement »load()« bedient sich optional ebenfalls – wie die Memory-Klasse – des Memory-Mapping-Verfahrens. Das Argument »mmap_mode« aktiviert es mit dem gleichen Parameter und möglichen Werten wie bei Memory: »r+« , »r« , »w+« und »c« dienen zum Lesen und Schreiben, ausschließlichen Lesen, Überschreiben beziehungsweise Nur-Lesen und im Arbeitsspeicher Ergänzen.

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