Używanie %lprun: wykrywanie wąskich gardeł
Profilowanie funkcji pozwala zagłębić się w jej kod źródłowy i znaleźć potencjalne wąskie gardła. Jeśli widzisz, że określone linie kodu pochłaniają większość czasu wykonania funkcji, to sygnał, że warto rozważyć inne, wydajniejsze podejście.
Przyjrzyjmy się bliżej funkcji convert_units().
def convert_units(heroes, heights, weights):
new_hts = [ht * 0.39370 for ht in heights]
new_wts = [wt * 2.20462 for wt in weights]
hero_data = {}
for i,hero in enumerate(heroes):
hero_data[hero] = (new_hts[i], new_wts[i])
return hero_data
Załaduj pakiet line_profiler do swojej sesji IPython. Następnie użyj %lprun, aby sprofilować funkcję convert_units() działającą na danych o superbohaterach. Pamiętaj o specjalnej składni wymaganej przez %lprun – konieczne będzie podanie flagi -f wskazującej funkcję, którą chcesz sprofilować.
Funkcja convert_units(), lista heroes, tablica hts oraz tablica wts są już załadowane do twojej sesji. Po zakończeniu pracy z kodem odpowiedz na poniższe pytanie:
Jaki procent czasu jest poświęcany na wyrażenie listowe new_hts w stosunku do całkowitego czasu wykonania funkcji convert_units()?
To ćwiczenie jest częścią kursu
Wydajny kod w Pythonie
Interaktywne ćwiczenie praktyczne
Przekształć teorię w praktykę dzięki jednemu z naszych interaktywnych ćwiczeń
Rozpocznij ćwiczenie