Vorwort
Diese Arbeit wurde mithilfe von KI übersetzt. Wir freuen uns über dein Feedback und deine Kommentare: translation-feedback@oreilly.com
Python ist leicht zu lernen. Wahrscheinlich bist du hier, weil dein Code jetzt richtig läuft und du ihn schneller machen willst. Du magst die Tatsache, dass dein Code leicht zu ändern ist und du schnell mit Ideen arbeiten kannst. Der Kompromiss zwischen einfach zu entwickeln und so schnell zu laufen, wie ich es brauche, ist ein wohlbekanntes und oft beklagtes Phänomen. Es gibt Lösungen.
Manche Leute haben serielle Prozesse, die schneller laufen müssen. Andere haben Probleme, die von Multicore-Architekturen, Clustern oder Grafikprozessoren profitieren könnten. Manche brauchen skalierbare Systeme, die je nach Zweckmäßigkeit und finanziellen Mitteln mehr oder weniger verarbeiten können, ohne an Zuverlässigkeit zu verlieren. Andere werden feststellen, dass ihre Kodierungstechniken, die sie oft aus anderen Sprachen übernommen haben, vielleicht nicht so natürlich sind wie die Beispiele, die sie von anderen sehen.
In diesem Buch behandeln wir all diese Themen und geben praktische Anleitungen, um Engpässe zu verstehen und schnellere und skalierbarere Lösungen zu entwickeln. Wir enthalten auch einige Kriegsgeschichten von denen, die dir vorausgegangen sind, die die Schläge eingesteckt haben, damit du es nicht tun musst.
Python eignet sich hervorragend für die schnelle Entwicklung, den Produktionseinsatz und skalierbare Systeme. Das Ökosystem ist voller Menschen, die daran arbeiten, es für dich zu skalieren, sodass du mehr Zeit hast, dich auf die anspruchsvolleren Aufgaben um dich herum zu konzentrieren.
Für wen dieses Buch ist
Du verwendest Python schon lange genug, um eine Vorstellung davon zu haben, warum bestimmte Dinge langsam sind und um zu sehen, dass Technologien wie Cython, numpy
und PyPy als mögliche Lösungen diskutiert werden. Vielleicht hast du auch schon mit anderen Sprachen programmiert und weißt daher, dass es mehr als einen Weg gibt, ein Leistungsproblem zu lösen.
Dieses Buch richtet sich in erster Linie an Menschen mit CPU-gebundenen Problemen, aber wir befassen uns auch mit Datentransfer und speichergebundenen Lösungen. Typischerweise werden diese Probleme von Wissenschaftlern, Ingenieuren, Quants und Akademikern gelöst.
Wir schauen uns auch Probleme an, mit denen ein Webentwickler konfrontiert werden könnte, wie z.B. die Bewegung von Daten und die Verwendung von Just-in-Time-Compilern (JIT) wie PyPy und asynchroner E/A für einfach zu erzielende Leistungssteigerungen.
Es könnte hilfreich sein, wenn du dich mit C (oder C++ oder vielleicht Java) auskennst, aber das ist keine Voraussetzung. Der gebräuchlichste Interpreter von Python (CPython - der Standard, den du normalerweise bekommst, wenn du python
auf der Kommandozeile eingibst) ist in C geschrieben und die Hooks und Bibliotheken legen alle die blutige innere C-Maschinerie offen. Es gibt viele andere Techniken, die wir behandeln, die keine C-Kenntnisse voraussetzen.
Du könntest auch Kenntnisse über die CPU, die Speicherarchitektur und die Datenbusse haben, aber auch das ist nicht unbedingt notwendig.
Für wen dieses Buch nicht geeignet ist
Dieses Buch ist für fortgeschrittene Python-Programmierer/innen gedacht. Auch motivierte Python-Anfänger können diesem Buch folgen, aber wir empfehlen eine solide Python-Grundlage.
Die Optimierung von Speichersystemen wird nicht behandelt. Wenn du einen SQL- oder NoSQL-Engpass hast, dann wird dir dieses Buch wahrscheinlich nicht helfen.
Was du lernen wirst
Deine Autorinnen und Autoren arbeiten seit vielen Jahren sowohl in der Industrie als auch in der Wissenschaft mit großen Datenmengen, der Anforderung " Ich will die Antworten schneller!" und dem Bedarf an skalierbaren Architekturen. Wir werden versuchen, unsere hart erarbeiteten Erfahrungen weiterzugeben, um dich davor zu bewahren, die gleichen Fehler zu machen, die wir gemacht haben.
Am Anfang jedes Kapitels werden wir Fragen auflisten, die der folgende Text beantworten sollte. (Wenn das nicht der Fall ist, sag es uns und wir werden es bei der nächsten Überarbeitung korrigieren!)
Wir behandeln die folgenden Themen:
-
Hintergrundwissen über die Funktionsweise eines Computers, damit du weißt, was hinter den Kulissen passiert
-
Listen und Tupel - die subtilen semantischen und Geschwindigkeitsunterschiede zwischen diesen grundlegenden Datenstrukturen
-
Wörterbücher und Mengen - Speicherzuweisungsstrategien und Zugriffsalgorithmen in diesen wichtigen Datenstrukturen
-
Iteratoren - wie man mit Pythonic schreibt und die Tür zu unendlichen Datenströmen mit Iteration öffnet
-
Reine Python-Ansätze - wie du Python und seine Module effektiv nutzen kannst
-
Matrizen mit
numpy
- wie man die geliebtenumpy
Bibliothek wie ein Tier benutzt -
Kompilierung und Just-in-Time-Computing - schnellere Verarbeitung durch Kompilierung in Maschinencode, wobei du dich an den Ergebnissen der Profilerstellung orientieren kannst
-
Gleichzeitigkeit - Wege zur effizienten Datenübertragung
-
multiprocessing
verschiedene Möglichkeiten, die eingebaute Bibliothekmultiprocessing
für parallele Berechnungen zu nutzen undnumpy
Matrizen effizient gemeinsam zu nutzen, sowie einige Kosten und Vorteile der Interprozesskommunikation (IPC) -
Cluster Computing - konvertiere deinen
multiprocessing
Code, damit er auf einem lokalen oder entfernten Cluster für Forschungs- und Produktionssysteme läuft. -
Weniger Arbeitsspeicher - Lösungsansätze für große Probleme, ohne einen riesigen Computer zu kaufen
-
Lektionen aus dem Feld - Lektionen, die in den Kriegsgeschichten derjenigen verschlüsselt sind, die die Schläge eingesteckt haben, damit du es nicht tun musst
Python 3
Python 3 ist ab 2020 die Standardversion von Python. Python 2.7 wird nach einem zehnjährigen Migrationsprozess veraltet sein. Wenn du noch mit Python 2.7 arbeitest, machst du etwas falsch - viele Bibliotheken werden für deine Python-Version nicht mehr unterstützt und der Support wird mit der Zeit immer teurer. Bitte tu der Gemeinschaft einen Gefallen und migriere auf Python 3 und sorge dafür, dass alle neuen Projekte Python 3 verwenden.
In diesem Buch verwenden wir 64-Bit-Python. 32-Bit-Python wird zwar unterstützt, ist aber für wissenschaftliche Arbeiten weit weniger gebräuchlich. Wir gehen davon aus, dass alle Bibliotheken wie gewohnt funktionieren, aber die numerische Genauigkeit, die von der Anzahl der zum Zählen verfügbaren Bits abhängt, wird sich wahrscheinlich ändern. 64-Bit ist in diesem Bereich vorherrschend, zusammen mit *nix-Umgebungen (oft Linux oder Mac). Mit 64-Bit kannst du größere Mengen an RAM adressieren. Mit *nix kannst du Anwendungen entwickeln, die auf wohlverstandene Weise eingesetzt und konfiguriert werden können und ein wohlverstandenes Verhalten aufweisen.
Wenn du ein Windows-Benutzer bist, musst du dich anschnallen. Das meiste von dem, was wir zeigen, wird problemlos funktionieren, aber einige Dinge sind betriebssystemspezifisch und du musst nach einer Windows-Lösung suchen. Die größte Schwierigkeit für Windows-Benutzer ist die Installation von Modulen: Wenn du auf Seiten wie Stack Overflow recherchierst, solltest du die Lösungen finden, die du brauchst. Wenn du unter Windows arbeitest, kann dir eine virtuelle Maschine (z. B. mit VirtualBox) mit einer laufenden Linux-Installation helfen, freier zu experimentieren.
Windows-Benutzer sollten sich auf jeden Fall eine Paketlösung ansehen, wie sie über Anaconda, Canopy, Python(x,y) oder Sage erhältlich ist. Die gleichen Distributionen machen auch das Leben von Linux- und Mac-Benutzern viel einfacher.
Änderungen von Python 2.7
Wenn du von Python 2.7 upgegradet hast, sind dir vielleicht ein paar wichtige Änderungen nicht bekannt:
-
/
bedeutete in Python 2.7 Ganzzahldivision, während es in Python 3 Fließkommadivisionen durchführt. -
str
undunicode
wurden in Python 2.7 zur Darstellung von Textdaten verwendet; in Python 3 ist alles einstr
, und diese sind immer Unicode. Der Klarheit halber wird der Typbytes
verwendet, wenn wir nicht kodierte Bytefolgen verwenden.
Wenn du gerade dabei bist, deinen Code zu aktualisieren, sind zwei gute Anleitungen "Porting Python 2 Code to Python 3" und "Supporting Python 3: An in-depth guide". Mit einer Distribution wie Anaconda oder Canopy kannst du sowohl Python 2 als auch Python 3 gleichzeitig laufen lassen - das vereinfacht deine Portierung.
Lizenz
Dieses Buch ist lizenziert unter Creative Commons Attribution-NonCommercial-NoDerivs 3.0.
Du darfst dieses Buch gerne für nicht-kommerzielle Zwecke verwenden, auch fürnicht-kommerzielle Lehrveranstaltungen. Die Lizenz erlaubt nur vollständige Vervielfältigungen; für Teilvervielfältigungen wende dich bitte an O'Reilly (siehe "Wie du uns kontaktierst"). Bitte gib das Buch wie im folgenden Abschnitt angegeben an.
Wir haben ausgehandelt, dass das Buch eine Creative-Commons-Lizenz haben soll, damit der Inhalt weiter in der Welt verbreitet werden kann. Wir würden uns sehr über ein Bier freuen, wenn dir diese Entscheidung geholfen hat. Wir vermuten, dass die Mitarbeiter von O'Reilly ähnlich über das Bier denken würden.
Wie man eine Zuschreibung vornimmt
Die Creative-Commons-Lizenz verlangt, dass du die Verwendung eines Teils dieses Buches mit einer Namensnennung versiehst. Namensnennung bedeutet nur, dass du etwas schreiben solltest, dem jemand anderes folgen kann, um dieses Buch zu finden. Das Folgende wäre sinnvoll:"High Performance Python, 2. Aufl., von Micha Gorelick und Ian Ozsvald (O'Reilly). Copyright 2020 Micha Gorelick und Ian Ozsvald, 978-1-492-05502-0."
Errata und Feedback
Wir ermutigen dich, dieses Buch auf öffentlichen Seiten wie Amazon zu rezensieren - bitte hilf anderen, zu verstehen, ob sie von diesem Buch profitieren könnten! Du kannst uns auch eine E-Mail anfeedback@highperformancepython.com schicken.
Wir sind besonders daran interessiert, von Fehlern im Buch, erfolgreichen Anwendungsfällen, bei denen dir das Buch geholfen hat, und leistungsstarken Techniken zu hören, die wir in der nächsten Ausgabe behandeln sollten. Du kannst die Webseite für dieses Buch unter https://oreil.ly/high-performance-python-2e aufrufen .
Beschwerden werden über den instant-complaint-transmission-service >
/dev/null
entgegengenommen.
In diesem Buch verwendete Konventionen
In diesem Buch werden die folgenden typografischen Konventionen verwendet:
- Kursiv
-
Weist auf neue Begriffe, URLs, E-Mail-Adressen, Dateinamen und Dateierweiterungen hin.
Constant width
-
Wird für Programmlistings sowie innerhalb von Absätzen verwendet, um auf Programmelemente wie Variablen- oder Funktionsnamen, Datenbanken, Datentypen, Umgebungsvariablen, Anweisungen und Schlüsselwörter hinzuweisen.
Constant width bold
-
Zeigt Befehle oder anderen Text an, der vom Benutzer wortwörtlich eingetippt werden sollte.
Constant width italic
-
Zeigt Text an, der durch vom Benutzer eingegebene Werte oder durch kontextabhängige Werte ersetzt werden soll.
Tipp
Dieses Element steht für einen Tipp, eine Anregung oder eine kritische Denkfrage.
Hinweis
Dieses Element steht für einen allgemeinen Hinweis.
Warnung
Dieses Element weist auf eine Warnung oder einen Warnhinweis hin.
Code-Beispiele verwenden
Zusätzliches Material (Code-Beispiele, Übungen usw.) steht unter https://github.com/mynameisfiber/high_performance_python_2e zum Download bereit .
Wenn du eine technische Frage oder ein Problem mit den Codebeispielen hast, sende bitte eine E-Mail an bookquestions@oreilly.com.
Dieses Buch soll dir helfen, deine Arbeit zu erledigen. Wenn in diesem Buch Beispielcode angeboten wird, darfst du ihn in deinen Programmen und deiner Dokumentation verwenden. Du musst uns nicht um Erlaubnis fragen, es sei denn, du reproduzierst einen großen Teil des Codes. Wenn du zum Beispiel ein Programm schreibst, das mehrere Teile des Codes aus diesem Buch verwendet, brauchst du keine Erlaubnis. Der Verkauf oder die Verbreitung von Beispielen aus O'Reilly-Büchern erfordert jedoch eine Genehmigung. Die Beantwortung einer Frage mit einem Zitat aus diesem Buch und einem Beispielcode erfordert keine Genehmigung. Wenn du einen großen Teil des Beispielcodes aus diesem Buch in die Dokumentation deines Produkts aufnimmst, ist eineGenehmigung erforderlich.
Wenn du der Meinung bist, dass deine Verwendung von Codebeispielen nicht unter die Fair-Use-Regelung oder die oben genannte Erlaubnis fällt, kannst du uns gerne unter permissions@oreilly.com kontaktieren .
O'Reilly Online Learning
Hinweis
Seit mehr als 40 Jahren bietet O'Reilly Media Schulungen, Wissen und Einblicke in Technologie und Wirtschaft, um Unternehmen zum Erfolg zu verhelfen.
Unser einzigartiges Netzwerk von Experten und Innovatoren teilt sein Wissen und seine Erfahrung durch Bücher, Artikel und unsere Online-Lernplattform. Die Online-Lernplattform von O'Reilly bietet dir On-Demand-Zugang zu Live-Trainingskursen, ausführlichen Lernpfaden, interaktiven Programmierumgebungen und einer umfangreichen Text- und Videosammlung von O'Reilly und über 200 anderen Verlagen. Weitere Informationen erhältst du unter http://oreilly.com.
Wie du uns kontaktierst
Bitte richte Kommentare und Fragen zu diesem Buch an den Verlag:
- O'Reilly Media, Inc.
- 1005 Gravenstein Highway Nord
- Sebastopol, CA 95472
- 800-998-9938 (in den Vereinigten Staaten oder Kanada)
- 707-829-0515 (international oder lokal)
- 707-829-0104 (Fax)
Schreib eine E-Mail an bookquestions@oreilly.com, um Kommentare oder technische Fragen zu diesem Buch zu stellen.
Neuigkeiten und weitere Informationen zu unseren Büchern und Kursen findest du auf unserer Website unter http://oreilly.com.
Finde uns auf Facebook: http://facebook.com/oreilly
Folge uns auf Twitter: http://twitter.com/oreillymedia
Schau uns auf YouTube: http://youtube.com/oreillymedia
Danksagungen
Hilary Mason hat unser Vorwort geschrieben - vielen Dank, dass du eine so wunderbare Eröffnungsgeschichte für unser Buch verfasst hast. Giles Weaver und Dimitri Denisjonok haben uns unschätzbares technisches Feedback zu dieser Ausgabe gegeben; großartige Arbeit, meine Herren.
Danke an Patrick Cooper, Kyran Dale, Dan Foreman-Mackey, Calvin Giles, Brian Granger, Jamie Matthews, John Montgomery, Christian Schou Oxvig, Matt "snakes" Reiferson, Balthazar Rouberol, Michael Skirpan, Luke Underwood, Jake Vanderplas und William Winter für wertvolles Feedback und Beiträge.
Ian dankt seiner Frau Emily dafür, dass sie ihn für weitere acht Monate hat verschwinden lassen, um diese zweite Ausgabe zu schreiben (zum Glück ist sie sehr verständnisvoll). Ian entschuldigt sich bei seiner Hündin, weil sie nicht so viel im Wald spazieren gegangen ist, wie er es gerne getan hätte, sondern nur gesessen und geschrieben hat.
Micha dankt Marion und dem Rest ihrer Freunde und Familie dafür, dass sie so geduldig war, während sie das Schreiben lernte.
Die Redakteure von O'Reilly sind sehr nett; du solltest unbedingt mit ihnen sprechen, wenn du dein eigenes Buch schreiben willst.
Unsere Mitwirkenden im Kapitel "Lektionen aus der Praxis" haben uns freundlicherweise ihre Zeit und ihre hart erarbeiteten Lektionen zur Verfügung gestellt. Wir bedanken uns bei Soledad Galli, Linda Uruchurtu, Vanentin Haenel und Vincent D. Warmerdam für diese Ausgabe und bei Ben Jackson, Radim Řehůřek, Sebastjan Trepca, Alex Kelly, Marko Tasic und Andrew Godwin für ihre Zeit und ihren Einsatz bei der vorherigen Ausgabe.
Get High Performance Python, 2. Auflage now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.