Facebook - konwersja

  • nowość

Wysoko wydajny Python. Efektywne programowanie w praktyce - ebook

Wydawnictwo:
Tłumacz:
Format:
MOBI
Data wydania:
7 stycznia 2026
129,00
12900 pkt
punktów Virtualo

Wysoko wydajny Python. Efektywne programowanie w praktyce - ebook

Każdy, kto się zetknął z językiem Python, wie, że jest on prosty i przyjazny dla programistów, ale ma też swoje ograniczenia przy pracy z dużymi wolumenami danych szybko pojawiają się problemy z wydajnością i ze skalowaniem. Niekiedy pomaga mocniejsza konfiguracja sprzętowa, jednak najczęściej kluczowe jest zastosowanie odpowiednich technik programistycznych i właściwych narzędzi.

Dzięki kolejnemu, poszerzonemu i zaktualizowanemu wydaniu tego praktycznego podręcznika zdobędziesz wszechstronną wiedzę o czynnikach wpływających na wydajność kodu. Dowiesz się, jak lokalizować wąskie gardła wydajności i optymalizować kod w programach, które przetwarzają duże wolumeny danych. Lepiej też zrozumiesz zasady implementacji kodu Pythona. W książce poruszono takie zagadnienia jak architektury wielordzeniowe, klastry, skalowanie systemu poza limity pamięci RAM lub z wykorzystaniem procesorów graficznych. Zaprezentowano praktyczne sposoby radzenia sobie z różnymi wyzwaniami, przybliżono również optymalizację kodu Pythona w wielu realnych scenariuszach, w tym na przykład w sytuacji wyodrębniania danych generatywnej sztucznej inteligencji i uczenia maszynowego w wersji produkcyjnej.

W książce:

  • narzędzia NumPy i Cython, a także narzędzia profilujące
  • wyszukiwanie wąskich gardeł wykorzystania czasu procesora i pamięci
  • dobór odpowiednich struktur danych, macierze i wektory
  • przyspieszanie sieci neuronowych i obliczeń opartych na procesorach GPU
  • zarządzanie wieloma operacjami obliczeniowymi i operacjami wejścia-wyjścia
  • przetwarzanie współbieżne w klastrze

To lektura obowiązkowa dla każdego programisty Pythona!

Mikhail Timonin, projektant, Engelhart

Spis treści

Słowo wstępne

Przedmowa

1. Wydajny kod w Pythonie

  • Podstawowy system komputerowy
    • Jednostki obliczeniowe
    • Jednostki pamięci
    • Warstwy komunikacji
  • Porównanie wyidealizowanego przetwarzania z maszyną wirtualną języka Python
    • Wyidealizowane przetwarzanie
    • Maszyna wirtualna języka Python
  • Dlaczego warto używać Pythona?
  • Jak zostać bardzo wydajnym programistą?
    • Sprawdzone praktyki
    • Optymalizowanie pod kątem zespołu, a nie bloku kodu
    • Wydajny programista pracujący zdalnie
    • Wnioski dotyczące sprawdzonych praktyk korzystania z rozszerzenia Jupyter Notebook
    • Twoja praca
  • Przyszłość języka Python
    • Gdzie się podziała blokada GIL?
    • Czy język Python oferuje kompilator JIT?
  • Podsumowanie

2. Użycie profilowania do znajdowania wąskich gardeł

  • 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
  • Połączenie profilowania procesora i pamięci przy użyciu narzędzia Scalene
  • Introspekcja istniejącego procesu za pomocą narzędzia PySpy
  • Wyświetlanie interaktywnego stosu wywołań na osi czasu za pomocą narzędzia VizTracer
  • Kod bajtowy od podszewki
    • Użycie modułu dis do sprawdzenia kodu bajtowego narzędzia CPython
    • Analizowanie specjalizacji kodu bajtowego za pomocą narzędzia Specialist
    • 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

3. Listy i krotki

  • Bardziej efektywne wyszukiwanie
  • Porównanie list i krotek
    • Listy jako tablice dynamiczne
    • Krotki w roli tablic statycznych
  • Podsumowanie

4. Słowniki i zbiory

  • Jak działają słowniki i zbiory?
    • Wstawianie i pobieranie
    • Usuwanie
    • Zmiana wielkości
    • Funkcje mieszania i entropia
  • Podsumowanie

5. Iteratory i generatory

  • Iteratory dla szeregów nieskończonych
  • Wartościowanie leniwe generatora
  • Podsumowanie

6. Obliczenia macierzowe i wektorowe

  • 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
  • Procesory graficzne (GPU)
    • Grafy dynamiczne: PyTorch
    • Szybkość procesorów graficznych i precyzja obliczeń
    • Operacje specyficzne dla procesorów graficznych
    • Podstawowe profilowanie procesora graficznego
    • Elementy wydajności procesorów graficznych
    • Kiedy stosować procesory graficzne?
    • Kwestie wydajności w uczeniu głębokim
  • Przestroga: weryfikowanie "optymalizacji" (biblioteka scipy)
  • Wnioski z optymalizacji macierzy
  • Podsumowanie

7. Pandas, Dask i Polars

  • Pandas
    • Wewnętrzny model biblioteki Pandas
    • Format danych Arrow i biblioteka NumPy
    • Zastosowanie funkcji względem wielu wierszy danych
    • Użycie narzędzia Numba do kompilacji kodu biblioteki NumPy pod kątem biblioteki Pandas
    • Budowanie z wyników częściowych zamiast stosowania konkatenacji
    • Istnieje więcej sposobów niż jeden (i być może szybszych) na wykonanie zadania
    • Porady dotyczące efektywnego projektowania z użyciem biblioteki Pandas
  • Biblioteka Dask obsługująca struktury danych rozproszonych i DataFrame
    • Diagnostyka
    • Przetwarzanie równoległe w bibliotece Pandas z wykorzystaniem biblioteki Dask
    • Przetwarzanie równoległe metody apply w ramach biblioteki Dask z użyciem pakietu Swifter
  • Szybkie struktury DataFrame dzięki bibliotece Polars
  • Podsumowanie

8. Kompilowanie do postaci kodu C

  • 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 w Pythonie 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
  • 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?
  • Interfejsy funkcji zewnętrznych
    • ctypes
    • cffi
    • f2py
    • Rozszerzenia narzędzia CPython - język C
    • Rozszerzenia narzędzia CPython - język Rust
  • Podsumowanie

9. Asynchroniczne operacje wejścia-wyjścia

  • Wprowadzenie do programowania asynchronicznego
  • Jak działają funkcja async i instrukcja await?
    • Sieciowy przeszukiwacz szeregowy
    • Asynchroniczny przeszukiwacz sieciowy
  • Wspólne obciążenie procesora i urządzeń wejścia-wyjścia
    • Obciążenie procesora przez proces szeregowy
    • Obciążenie procesora przez przetwarzanie wsadowe
    • W pełni asynchroniczne obciążenie procesora
  • Podsumowanie

10. Moduł multiprocessing

  • Moduł multiprocessing
  • Przybliżenie liczby pi przy użyciu metody Monte Carlo
  • Przybliżanie liczby pi za pomocą procesów i wątków
    • Zastosowanie obiektów języka Python
    • Zastępowanie modułu multiprocessing biblioteką Joblib
    • Liczby losowe w systemach przetwarzania równoległego
    • Zastosowanie narzędzia numpy
  • Znajdowanie liczb pierwszych
    • Kolejki zadań roboczych
    • Asynchroniczne dodawanie zadań do kolejki Queue
  • Weryfikowanie liczb pierwszych za pomocą komunikacji międzyprocesowej
    • Rozwiązanie z przetwarzaniem szeregowym
    • Rozwiązanie z prostym obiektem Pool
    • Rozwiązanie z bardzo prostym obiektem Pool dla mniejszych liczb
    • Użycie obiektu Manager.Value jako flagi
    • Użycie systemu Redis jako flagi
    • Użycie obiektu RawValue jako flagi
    • Użycie modułu mmap jako flagi
    • Użycie modułu mmap do odtworzenia flagi
  • Współużytkowanie danych narzędzia numpy za pomocą modułu multiprocessing
  • Synchronizowanie dostępu do zmiennych i plików
    • Blokowanie plików
    • Blokowanie obiektu Value
  • Podsumowanie

11. Klastry i kolejki zadań

  • Zalety klastrowania
  • Wady klastrowania
    • Strata o wartości 462 milionów dolarów na giełdzie Wall Street z powodu kiepskiej strategii aktualizacji klastra
    • 24-godzinny przestój usługi Skype w skali globalnej
  • Typowe projekty klastrowe
  • Metoda rozpoczęcia tworzenia rozwiązania klastrowego
  • Sposoby na uniknięcie kłopotów podczas korzystania z klastrów
  • Dwa rozwiązania klastrowe
    • Użycie modułu IPython Parallel do obsługi badań
    • Użycie brokera komunikatów pod kątem efektywności klastra
  • Inne warte uwagi narzędzia klastrowania
  • Docker
    • Wydajność Dockera
    • Zalety Dockera
  • Podsumowanie

12. Mniejsze wykorzystanie pamięci RAM

  • Obiekty typów podstawowych są kosztowne
    • Moduł array zużywa mniej pamięci do przechowywania wielu obiektów typu podstawowego
    • Mniejsze zużycie pamięci RAM w bibliotece NumPy dzięki narzędziu NumExpr
  • Analiza wykorzystania pamięci RAM w kolekcji
  • Bajty i obiekty Unicode
  • Efektywne przechowywanie zbiorów tekstowych w pamięci RAM
    • Zastosowanie metod dla 11 milionów tokenów
  • Modelowanie większej ilości tekstu za pomocą narzędzia FeatureHasher biblioteki scikit-learn
  • Wprowadzenie do narzędzi DictVectorizer i FeatureHasher
    • Porównanie narzędzi DictVectorizer i FeatureHasher w wypadku rzeczywistego problemu
  • Macierze rzadkie biblioteki SciPy
  • Wskazówki dotyczące mniejszego wykorzystania pamięci RAM
  • Probabilistyczne struktury danych
    • Obliczenia o bardzo dużym stopniu przybliżenia z wykorzystaniem jednobajtowego licznika Morrisa
    • Wartości k-minimum
    • Filtry Blooma
    • Licznik LogLog
    • Praktyczny przykład
  • Podsumowanie

13. Rady specjalistów z branży

  • Projektowanie algorytmu uczenia maszynowego o dużej wydajności
    • Przyglądanie się danym
    • Dedykowane narzędzia analityczne
    • Stosowanie odpowiednich metryk ewaluacji
    • Klasyczne metody naukowe: badania oparte na hipotezach
  • Wykorzystanie w dziennikarstwie obliczeń o dużej wydajności
    • Still Loading
    • Małe prędkości i szybka iteracja
  • Rady z branży reasekuracji cybernetycznej
    • Miej jasną wizję problemu i wymagań dotyczących realizacji
    • Nie lekceważ znaczenia wiedzy eksperckiej
    • Proaktywna ochrona przed złymi danymi
    • Zarządzanie narastającym długiem technicznym
    • Twórz narzędzia rozszerzające procesy oparte na pracy ludzi
    • Podsumowanie
  • Zastosowanie języka Python w finansach ilościowych
    • Metoda wektoryzacji
    • Uproszczone maszyny stanów
    • Projektowanie pod kątem wydajności
  • Utrzymywanie elastyczności w celu osiągnięcia dużej wydajności
    • Twoje największe ograniczenie to Twój własny czas
    • Przesuwanie słupków bramki
    • Nowe perspektywy
    • Rozpoczynanie nowego projektu
    • Wartość dobrych danych
  • Usprawnianie potoków inżynierii cech za pomocą biblioteki Feature-engine (2020)
    • Inżynieria cech w przypadku uczenia maszynowego
    • Trudne zadanie wdrażania potoków inżynierii cech
    • Wykorzystanie możliwości bibliotek open source języka Python
    • Biblioteka Feature-engine usprawnia budowanie i wdrażanie potoków inżynierii cech
    • Ułatwienie adaptacji nowego pakietu open source
    • Projektowanie, utrzymywanie i zachęcanie do uczestnictwa w rozwoju bibliotek open source
  • Bardzo wydajne zespoły danologów (2020)
    • Ile to potrwa?
    • Poznawanie i planowanie
    • Zarządzanie oczekiwaniami i dostarczeniem produktu
  • Numba (2020)
    • Prosty przykład
    • Najlepsze praktyki i zalecenia
    • Uzyskiwanie pomocy
  • Optymalizowanie a myślenie (2020)
  • Technika głębokiego uczenia prezentowana przez firmę RadimRehurek.com (2014)
    • Strzał w dziesiątkę
    • Rady dotyczące optymalizacji
    • Podsumowanie
  • Analiza serwisu społecznościowego o dużej skali w firmie Smesh (2014)
    • Rola języka Python w firmie Smesh
    • Platforma
    • Dopasowywanie łańcuchów w czasie rzeczywistym z dużą wydajnością
    • Raportowanie, monitorowanie, debugowanie i wdrażanie
Kategoria: Programowanie
Zabezpieczenie: Watermark
Watermark
Watermarkowanie polega na znakowaniu plików wewnątrz treści, dzięki czemu możliwe jest rozpoznanie unikatowej licencji transakcyjnej Użytkownika. E-książki zabezpieczone watermarkiem można odczytywać na wszystkich urządzeniach odtwarzających wybrany format (czytniki, tablety, smartfony). Nie ma również ograniczeń liczby licencji oraz istnieje możliwość swobodnego przenoszenia plików między urządzeniami. Pliki z watermarkiem są kompatybilne z popularnymi programami do odczytywania ebooków, jak np. Calibre oraz aplikacjami na urządzenia mobilne na takie platformy jak iOS oraz Android.
ISBN: 978-83-289-3125-1
Rozmiar pliku: 11 MB

BESTSELLERY

Menu

Zamknij