Profiling kode untuk runtime

Menulis Kode Python yang Efisien

Logan Thomas

Scientific Software Technical Trainer, Enthought

Profiling kode

  • Statistik rinci frekuensi dan durasi pemanggilan fungsi
  • Analisis per baris
  • Paket yang digunakan: line_profiler
pip install line_profiler
Menulis Kode Python yang Efisien

Profiling kode: runtime

heroes = ['Batman', 'Superman', 'Wonder Woman']

hts = np.array([188.0, 191.0, 183.0])

wts = np.array([ 95.0, 101.0,  74.0])
Menulis Kode Python yang Efisien
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
convert_units(heroes, hts, wts)
{'Batman': (74.0156, 209.4389),
 'Superman': (75.1967, 222.6666),
 'Wonder Woman': (72.0471, 163.1419)}
Menulis Kode Python yang Efisien

Profiling kode: runtime

%timeit convert_units(heroes, hts, wts)
3 µs ± 32 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Menulis Kode Python yang Efisien
%timeit new_hts = [ht * 0.39370  for ht in hts]
1.09 µs ± 11 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%timeit new_wts = [wt * 2.20462  for wt in wts]
1.08 µs ± 6.42 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
hero_data = {}
for i,hero in enumerate(heroes):
    hero_data[hero] = (new_hts[i], new_wts[i])
634 ns ± 9.29 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Menulis Kode Python yang Efisien

Profiling kode: line_profiler

Menggunakan paket line_profiler

%load_ext line_profiler

Perintah magic untuk waktu per baris

%lprun -f
Menulis Kode Python yang Efisien

Profiling kode: line_profiler

Menggunakan paket line_profiler

%load_ext line_profiler

Perintah magic untuk waktu per baris

%lprun -f convert_units
Menulis Kode Python yang Efisien

Profiling kode: line_profiler

Menggunakan paket line_profiler

%load_ext line_profiler

Perintah magic untuk waktu per baris

%lprun -f convert_units convert_units(heroes, hts, wts)
Menulis Kode Python yang Efisien

Keluaran %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt=”Keluaran tabel perintah magic lprun yang merangkum statistik profiling runtime”

Menulis Kode Python yang Efisien

Keluaran %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt=”Keluaran tabel perintah magic lprun yang merangkum statistik profiling runtime dengan kolom Line # dan Hits disorot”

Menulis Kode Python yang Efisien

Keluaran %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt=”Keluaran tabel perintah magic lprun yang merangkum statistik profiling runtime dengan kolom Time disorot”

Menulis Kode Python yang Efisien

Keluaran %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt=”Keluaran tabel perintah magic lprun yang merangkum statistik profiling runtime dengan unit Time pada baris pertama disorot”

Menulis Kode Python yang Efisien

Keluaran %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt=”Keluaran tabel perintah magic lprun yang merangkum statistik profiling runtime dengan baris ketiga disorot”

Menulis Kode Python yang Efisien

Keluaran %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt=”Keluaran tabel perintah magic lprun yang merangkum statistik profiling runtime dengan kolom Per Hit disorot”

Menulis Kode Python yang Efisien

Keluaran %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

Keluaran tabel perintah magic lprun yang merangkum statistik profiling runtime dengan baris kesembilan disorot

Menulis Kode Python yang Efisien

Keluaran %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt=”Keluaran tabel perintah magic lprun yang merangkum statistik profiling runtime dengan kolom % Time disorot”

Menulis Kode Python yang Efisien

Keluaran %lprun

%lprun -f convert_units convert_units(heroes, hts, wts)

alt=”Keluaran tabel perintah magic lprun yang merangkum statistik profiling runtime dengan kolom Line Contents disorot”

Menulis Kode Python yang Efisien
%timeit convert_units convert_units(heroes, hts, wts)
3 µs ± 32 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%lprun -f convert_units convert_units(heroes, hts, wts)

alt="Keluaran tabel perintah magic lprun yang merangkum statistik profiling runtime dengan baris kedua Total time disorot"

Menulis Kode Python yang Efisien

Ayo berlatih kemampuan profiling Anda!

Menulis Kode Python yang Efisien

Preparing Video For Download...