Wysoko wydajny Python Efektywne programowanie w praktyce Wydanie II.pdf

(2667 KB) Pobierz
Tytuł oryginału: High Performance Python: Practical Performant Programming for Humans, 2nd Edition
Tłumaczenie: Piotr Pilch
ISBN: 978-83-283-7184-2
© 2021 Helion SA
Authorized Polish translation of the English edition of High Performance Python, 2nd Edition ISBN
9781492055020 © 2020 Micha Gorelick and Ian Ozsvald
This translation is published and sold by permission of O’Reilly Media, Inc.,
which owns or controls all rights to publish and sell the same.
All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording or by any information storage retrieval system,
without permission from the Publisher.
Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej
publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną,
fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje
naruszenie praw autorskich niniejszej publikacji.
Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich
właścicieli.
Autor oraz Helion SA dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne
i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym
ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Helion SA nie ponoszą również
żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce.
Helion SA
ul. Kościuszki 1c, 44-100 Gliwice
tel. 32 231 22 19, 32 230 98 63
e-mail:
helion@helion.pl
WWW:
http://helion.pl
(księgarnia internetowa, katalog książek)
Drogi Czytelniku!
Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres
http://helion.pl/user/opinie/pytps2
Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję.
Printed in Poland.
Kup książkę
Poleć książkę
Oceń książkę
Księgarnia internetowa
Lubię to! » Nasza społeczność
Spis treści
Słowo wstępne ......................................................................................................... 11
Przedmowa .............................................................................................................. 13
1. Wydajny kod Python ................................................................................................. 19
Podstawowy system komputerowy
Jednostki obliczeniowe
Jednostki pamięci
Warstwy komunikacji
Łączenie ze sobą podstawowych elementów
Porównanie wyidealizowanego przetwarzania
z maszyną wirtualną języka Python
Dlaczego warto używać języka Python?
Jak zostać bardzo wydajnym programistą?
Sprawdzone praktyki
Wnioski dotyczące sprawdzonych praktyk korzystania
z rozszerzenia Jupyter Notebook
Niech praca znów sprawia radość
19
20
23
26
27
27
31
34
35
37
38
2. Użycie profilowania do znajdowania wąskich gardeł .................................................. 39
Efektywne profilowanie
Wprowadzenie do zbioru Julii
Obliczanie pełnego zbioru Julii
Proste metody pomiaru czasu — instrukcja print i dekorator
Prosty pomiar czasu za pomocą polecenia time systemu Unix
Użycie modułu cProfile
Użycie narzędzia snakeviz do wizualizacji danych wyjściowych modułu cProfile
Użycie narzędzia line_profiler do pomiarów dotyczących kolejnych wierszy kodu
Użycie narzędzia memory_profiler do diagnozowania wykorzystania pamięci
Introspekcja istniejącego procesu za pomocą narzędzia py-spy
40
41
45
48
51
52
57
57
63
68
3
Kup książkę
Poleć książkę
Kod bajtowy od podszewki
Użycie modułu dis do sprawdzenia kodu bajtowego narzędzia CPython
Różne metody, różna złożoność
Testowanie jednostkowe podczas optymalizacji w celu zachowania poprawności
Dekorator @profile bez operacji
Strategie udanego profilowania kodu
Podsumowanie
69
69
71
73
73
76
77
3. Listy i krotki .............................................................................................................. 79
Bardziej efektywne wyszukiwanie
Porównanie list i krotek
Listy jako tablice dynamiczne
Krotki w roli tablic statycznych
Podsumowanie
82
84
85
88
89
4. Słowniki i zbiory ........................................................................................................ 91
Jak działają słowniki i zbiory?
Wstawianie i pobieranie
Usuwanie
Zmiana wielkości
Funkcje mieszania i entropia
Słowniki i przestrzenie nazw
Podsumowanie
94
94
97
98
99
102
105
5. Iteratory i generatory .............................................................................................. 107
Iteratory dla szeregów nieskończonych
Wartościowanie leniwe generatora
Podsumowanie
111
112
116
6. Obliczenia macierzowe i wektorowe ........................................................................ 117
Wprowadzenie do problemu
Czy listy języka Python są wystarczająco dobre?
Problemy z przesadną alokacją
Fragmentacja pamięci
Narzędzie perf
Podejmowanie decyzji z wykorzystaniem danych wyjściowych narzędzia perf
Wprowadzenie do narzędzia numpy
Zastosowanie narzędzia numpy w przypadku problemu dotyczącego dyfuzji
Przydziały pamięci i operacje wewnętrzne
Optymalizacje selektywne: znajdowanie tego, co wymaga poprawienia
Moduł numexpr: przyspieszanie i upraszczanie operacji wewnętrznych
Przestroga: weryfikowanie „optymalizacji” (biblioteka scipy)
4
Spis treści
Poleć książkę
118
122
123
126
128
131
132
135
138
141
143
146
Kup książkę
Wnioski z optymalizacji macierzy
Narzędzie Pandas
Model wewnętrzny narzędzia Pandas
Zastosowanie funkcji dla wielu wierszy danych
Budowanie struktur DataFrame i szeregów z wyników częściowych,
a nie przez łączenie
Zadanie może zostać zrealizowane na więcej niż jeden sposób
(i być może szybszy)
Rada dotycząca efektywnego projektowania
z wykorzystaniem narzędzia Pandas
Podsumowanie
148
150
150
152
159
160
161
163
7. Kompilowanie do postaci kodu C ..............................................................................165
Jakie wzrosty szybkości są możliwe?
Porównanie kompilatorów JIT i AOT
Dlaczego informacje o typie ułatwiają przyspieszenie działania kodu?
Użycie kompilatora kodu C
Analiza przykładu zbioru Julii
Cython
Kompilowanie czystego kodu Python za pomocą narzędzia Cython
pyximport
Użycie adnotacji kompilatora Cython do analizowania bloku kodu
Dodawanie adnotacji typu
Cython i numpy
Przetwarzanie równoległe rozwiązania na jednym komputerze
z wykorzystaniem interfejsu OpenMP
Numba
Użycie narzędzia Numba do kompilacji kodu NumPy dla narzędzia Pandas
PyPy
Różnice związane z czyszczeniem pamięci
Uruchamianie interpretera PyPy i instalowanie modułów
Zestawienie wzrostów szybkości
Kiedy stosować poszczególne technologie?
Inne przyszłe projekty
Procesory graficzne (GPU)
Grafy dynamiczne: PyTorch
Podstawowe profilowanie procesora graficznego
Elementy wydajności procesorów graficznych
Kiedy stosować procesory graficzne?
166
168
168
169
170
170
171
173
173
175
179
181
183
185
186
187
188
189
190
192
193
193
196
197
199
Spis treści
Kup książkę
5
Poleć książkę
Zgłoś jeśli naruszono regulamin