O'Reilly logo

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Python. Programuj szybko i wydajnie

Book Description

;Python to skryptowy język programowania istniejący na rynku od wielu lat -- jego pierwsza wersja pojawiła się w 1991 roku. Przejrzystość kodu źródłowego była jednym z głównych celów Guida van Rossuma, twórcy tego języka. Dziś Python cieszy się dużą popularnością, co z jednej strony świadczy o jego przydatności, a z drugiej gwarantuje użytkownikom szerokie wsparcie społeczności programistów języka. Python jest elastyczny, dopuszcza różne style programowania, a dzięki temu znajduje zastosowanie w wielu miejscach świata IT. Jeżeli chcesz w pełni wykorzystać możliwości Pythona i tworzyć wydajne rozwiązania, to koniecznie zaopatrz się w tę książkę! Dzięki niej dowiesz się, jak wykorzystać profilowanie do lokalizowania "wąskich gardeł", oraz poznasz efektywne techniki wyszukiwania danych na listach, w słownikach i zbiorach. Ponadto zdobędziesz wiedzę na temat obliczeń macierzowych i wektorowych oraz zobaczysz, jak kompilacja do postaci kodu C wpływa na wydajność Twojego rozwiązania. Osobne rozdziały zostały poświęcone współbieżności oraz modułowi multiprocessing. Opanowanie tych zagadnień pozwoli Ci ogromnie przyspieszyć działanie Twojej aplikacji. Na sam koniec nauczysz się tworzyć klastry i kolejki zadań oraz optymalizować zużycie pamięci RAM. Rozdział dwunasty to gratka dla wszystkich -- zawiera najlepsze porady specjalistów z branży! Książka ta jest obowiązkową lekturą dla wszystkich programistów chcących tworzyć wydajne rozwiązania w języku Python.

Table of Contents

  1. okładka
  2. Prawa autorskie strony
  3. tytuł strony
  4. Spis treści
  5. Przedmowa
  6. ROZDZIAŁ 1. Wydajny kod Python
    1. Podstawowy system komputerowy
      1. Jednostki obliczeniowe
      2. Jednostki pamięci
      3. Warstwy komunikacji
    2. Łączenie ze sobą podstawowych elementów
      1. Porównanie wyidealizowanego przetwarzania z maszyną wirtualną języka Python
    3. Dlaczego warto używać języka Python?
  7. ROZDZIAŁ 2. Użycie profilowania do znajdowania wąskich gardeł
    1. Efektywne profilowanie
    2. Wprowadzenie do zbioru Julii
    3. Obliczanie pełnego zbioru Julii
    4. Proste metody pomiaru czasu — instrukcja print i dekorator
    5. Prosty pomiar czasu za pomocą polecenia time systemu Unix
    6. Użycie modułu cProfile
    7. Użycie narzędzia runsnake do wizualizacji danych wyjściowych modułu cProfile
    8. Użycie narzędzia line_profiler do pomiarów dotyczących kolejnych wierszy kodu
    9. Użycie narzędzia memory_profiler do diagnozowania wykorzystania pamięci
    10. Inspekcja obiektów w stercie za pomocą narzędzia heapy
    11. Użycie narzędzia dowser do generowania aktywnego wykresu dla zmiennych z utworzonymi instancjami
    12. Użycie modułu dis do sprawdzania kodu bajtowego narzędzia CPython
      1. Różne metody, różna złożoność
    13. Testowanie jednostkowe podczas optymalizacji w celu zachowania poprawności
      1. Dekorator @profile bez operacji
    14. Strategie udanego profilowania kodu
    15. Podsumowanie
  8. ROZDZIAŁ 3. Listy i krotki
    1. Bardziej efektywne wyszukiwanie
    2. Porównanie list i krotek
    3. Listy jako tablice dynamiczne
    4. Krotki w roli tablic statycznych
    5. Podsumowanie
  9. ROZDZIAŁ 4. Słowniki i zbiory
    1. Jak działają słowniki i zbiory?
      1. Wstawianie i pobieranie
      2. Usuwanie
      3. Zmiana wielkości
      4. Funkcje mieszania i entropia
    2. Słowniki i przestrzenie nazw
    3. Podsumowanie
  10. ROZDZIAŁ 5. Iteratory i generatory
    1. Iteratory dla szeregów nieskończonych
    2. Wartościowanie leniwe generatora
    3. Podsumowanie
  11. ROZDZIAŁ 6. Obliczenia macierzowe i wektorowe
    1. Wprowadzenie do problemu
    2. Czy listy języka Python są wystarczająco dobre?
      1. Problemy z przesadną alokacją
    3. Fragmentacja pamięci
      1. Narzędzie perf
      2. Podejmowanie decyzji z wykorzystaniem danych wyjściowych narzędzia perf
      3. Wprowadzenie do narzędzia numpy
    4. Zastosowanie narzędzia numpy w przypadku problemu dotyczącego dyfuzji
      1. Przydziały pamięci i operacje wewnętrzne
      2. Optymalizacje selektywne: znajdowanie tego, co wymaga poprawienia
    5. Moduł numexpr: przyspieszanie i upraszczanie operacji wewnętrznych
    6. Przestroga: weryfikowanie „optymalizacji” (biblioteka scipy)
    7. Podsumowanie
  12. ROZDZIAŁ 7. Kompilowanie do postaci kodu C
    1. Jakie wzrosty szybkości są możliwe?
    2. Porównanie kompilatorów JIT i AOT
    3. Dlaczego informacje o typie ułatwiają przyspieszenie działania kodu?
    4. Użycie kompilatora kodu C
    5. Analiza przykładu zbioru Julii
    6. Cython
      1. Kompilowanie czystego kodu Python za pomocą narzędzia Cython
      2. Użycie adnotacji kompilatora Cython do analizowania bloku kodu
      3. Dodawanie adnotacji typu
    7. Shed Skin
      1. Tworzenie modułu rozszerzenia
      2. Koszt związany z kopiami pamięci
    8. Cython i numpy
      1. Przetwarzanie równoległe rozwiązania na jednym komputerze z wykorzystaniem interfejsu OpenMP
    9. Numba
    10. Pythran
    11. PyPy
      1. Różnice związane z czyszczeniem pamięci
      2. Uruchamianie interpretera PyPy i instalowanie modułów
    12. Kiedy stosować poszczególne technologie?
      1. Inne przyszłe projekty
      2. Uwaga dotycząca układów GPU
      3. Oczekiwania dotyczące przyszłego projektu kompilatora
    13. Interfejsy funkcji zewnętrznych
      1. ctypes
      2. cffi
      3. f2py
      4. Moduł narzędzia CPython
    14. Podsumowanie
  13. ROZDZIAŁ 8. Współbieżność
    1. Wprowadzenie do programowania asynchronicznego
    2. Przeszukiwacz szeregowy
    3. gevent
    4. tornado
    5. AsyncIO
    6. Przykład z bazą danych
    7. Podsumowanie
  14. ROZDZIAŁ 9. Moduł multiprocessing
    1. Moduł multiprocessing
    2. Przybliżenie liczby pi przy użyciu metody Monte Carlo
    3. Przybliżanie liczby pi za pomocą procesów i wątków
      1. Zastosowanie obiektów języka Python
      2. Liczby losowe w systemach przetwarzania równoległego
      3. Zastosowanie narzędzia numpy
    4. Znajdowanie liczb pierwszych
      1. Kolejki zadań roboczych
    5. Weryfikowanie liczb pierwszych za pomocą komunikacji międzyprocesowej
      1. Rozwiązanie z przetwarzaniem szeregowym
      2. Rozwiązanie z prostym obiektem Pool
      3. Rozwiązanie z bardzo prostym obiektem Pool dla mniejszych liczb
      4. Użycie obiektu Manager.Value jako flagi
      5. Użycie systemu Redis jako flagi
      6. Użycie obiektu RawValue jako flagi
      7. Użycie modułu mmap jako flagi
      8. Użycie modułu mmap do odtworzenia flagi
    6. Współużytkowanie danych narzędzia numpy za pomocą modułu multiprocessing
    7. Synchronizowanie dostępu do zmiennych i plików
      1. Blokowanie plików
      2. Blokowanie obiektu Value
    8. Podsumowanie
  15. ROZDZIAŁ 10. Klastry i kolejki zadań
    1. Zalety klastrowania
    2. Wady klastrowania
      1. Strata o wartości 462 milionów dolarów na giełdzie Wall Street z powodu kiepskiej strategii aktualizacji klastra
      2. 24-godzinny przestój usługi Skype w skali globalnej
    3. Typowe projekty klastrowe
    4. Metoda rozpoczęcia tworzenia rozwiązania klastrowego
    5. Sposoby na uniknięcie kłopotów podczas korzystania z klastrów
    6. Trzy rozwiązania klastrowe
      1. Użycie modułu Parallel Python dla prostych klastrów lokalnych
      2. Użycie modułu IPython Parallel do obsługi badań
    7. Użycie systemu NSQ dla niezawodnych klastrów produkcyjnych
      1. Kolejki
      2. Publikator/subskrybent
      3. Rozproszone obliczenia liczb pierwszych
    8. Inne warte uwagi narzędzia klastrowania
    9. Podsumowanie
  16. ROZDZIAŁ 11. Mniejsze wykorzystanie pamięci RAM
    1. Obiekty typów podstawowych są kosztowne
      1. Moduł array zużywa mniej pamięci do przechowywania wielu obiektów typu podstawowego
    2. Analiza wykorzystania pamięci RAM w kolekcji
    3. Bajty i obiekty Unicode
    4. Efektywne przechowywanie zbiorów tekstowych w pamięci RAM
      1. Zastosowanie metod dla 8 milionów tokenów
    5. Wskazówki dotyczące mniejszego wykorzystania pamięci RAM
    6. Probabilistyczne struktury danych
      1. Obliczenia o bardzo dużym stopniu przybliżenia z wykorzystaniem jednobajtowego licznika Morrisa
      2. Wartości k-minimum
      3. Filtry Blooma
      4. Licznik LogLog
      5. Praktyczny przykład
  17. ROZDZIAŁ 12. Rady specjalistów z branży
    1. Narzędzie Social Media Analytics (SoMA) firmy Adaptive Lab
      1. Język Python w firmie Adaptive Lab
      2. Projekt narzędzia SoMA
      3. Zastosowana metodologia projektowa
      4. Serwisowanie systemu SoMA
      5. Rada dla inżynierów z branży
    2. Technika głębokiego uczenia prezentowana przez firmę RadimRehurek.com
      1. Strzał w dziesiątkę
      2. Rady dotyczące optymalizacji
      3. Podsumowanie
    3. Uczenie maszynowe o dużej skali gotowe do zastosowań produkcyjnych w firmie Lyst.com
      1. Rola języka Python w witrynie Lyst
      2. Projekt klastra
      3. Ewolucja kodu w szybko rozwijającej się nowej firmie
      4. Budowanie mechanizmu rekomendacji
      5. Raportowanie i monitorowanie
      6. Rada
    4. Analiza serwisu społecznościowego o dużej skali w firmie Smesh
      1. Rola języka Python w firmie Smesh
      2. Platforma
      3. Dopasowywanie łańcuchów w czasie rzeczywistym z dużą wydajnością
      4. Raportowanie, monitorowanie, debugowanie i wdrażanie
    5. Interpreter PyPy zapewniający powodzenie systemów przetwarzania danych i systemów internetowych
      1. Wymagania wstępne
      2. Baza danych
      3. Aplikacja internetowa
      4. Mechanizm OCR i tłumaczenie
      5. Dystrybucja zadań i procesy robocze
      6. Podsumowanie
    6. Kolejki zadań w serwisie internetowym Lanyrd.com
      1. Rola języka Python w serwisie Lanyrd
      2. Zapewnianie odpowiedniej wydajności kolejki zadań
      3. Raportowanie, monitorowanie, debugowanie i wdrażanie
      4. Rada dla programistów z branży
  18. Skorowidz
  19. O autorach
  20. Kolofon
  21. Przypisy
    1. ROZDZIAŁ 1. Wydajny kod Python
    2. ROZDZIAŁ 2. Użycie profilowania do znajdowania wąskich gardeł
    3. ROZDZIAŁ 3. Listy i krotki
    4. ROZDZIAŁ 4. Słowniki i zbiory
    5. ROZDZIAŁ 5. Iteratory i generatory
    6. ROZDZIAŁ 6. Obliczenia macierzowe i wektorowe
    7. ROZDZIAŁ 7. Kompilowanie do postaci kodu C
    8. ROZDZIAŁ 8. Współbieżność
    9. ROZDZIAŁ 9. Moduł multiprocessing
    10. ROZDZIAŁ 10. Klastry i kolejki zadań
    11. ROZDZIAŁ 11. Mniejsze wykorzystanie pamięci RAM