Gambar oleh Penulis
Meskipun Python adalah salah satu bahasa pemrograman yang paling banyak digunakan, ketika datang ke kumpulan data besar sering kali mengalami waktu eksekusi yang buruk. Pembuatan profil adalah salah satu metode untuk memantau kinerja kode Anda secara dinamis dan mengidentifikasi jebakan. Perangkap ini mungkin menunjukkan adanya bug atau kode yang ditulis dengan buruk yang menghabiskan banyak sumber daya sistem. Menggunakan Profilers akan memberikan statistik terperinci dari program Anda yang dapat Anda gunakan untuk mengoptimalkan kode Anda untuk kinerja yang lebih baik. Mari kita lihat beberapa Python Profiler beserta contohnya.
cProfile adalah profiler bawaan di Python yang melacak setiap pemanggilan fungsi dalam program Anda. Ini memberikan informasi terperinci tentang seberapa sering suatu fungsi dipanggil, dan waktu eksekusi rata-ratanya. Karena dilengkapi dengan pustaka Python standar, kami tidak perlu menginstalnya secara eksplisit. Namun, ini tidak cocok untuk membuat profil data langsung karena menjebak setiap panggilan fungsi dan menghasilkan banyak statistik secara default.
Contoh
import cProfile def sum_(): total_sum = 0 # sum of numbers till 10000 for i in range(0,10001): total_sum += i return total_sum cProfile.run('sum_()')
Keluaran
4 function calls in 0.002 seconds
Ordered by: standard name
panggilan | saat ini | percall | waktu mani | percall | nama file percall:lineno(fungsi) |
1 | 0.000 | 0.000 | 0.002 | 0.002 | :1( ) |
1 | 0.002 | 0.002 | 0.002 | 0.002 | cprofile.py:3(jumlah_) |
1 | 0.000 | 0.000 | 0.002 | 0.002 | {metode bawaan bawaan.exec} |
1 | 0.000 | 0.000 | 0.000 | 0.000 | {metode 'menonaktifkan' objek '_lsprof.Profiler'} |
Seperti yang Anda lihat dari output, modul cProfile menyediakan banyak informasi tentang performa fungsi.
- ncalls = Berapa kali fungsi dipanggil
- tottime = Total waktu yang dihabiskan dalam fungsi
- percall = Total waktu yang dihabiskan per panggilan
- cumtime = Waktu kumulatif yang dihabiskan dalam sub-fungsi ini dan semua
- percall = Waktu kumulatif yang dihabiskan per panggilan.
Line Profiler adalah modul python yang kuat yang melakukan pembuatan profil baris demi baris dari kode Anda. Terkadang, hotspot dalam kode Anda mungkin berupa satu baris dan tidak mudah untuk menemukannya langsung dari kode sumber. Line Profiler sangat berharga dalam mengidentifikasi berapa banyak waktu yang dibutuhkan oleh setiap baris untuk dieksekusi dan bagian mana yang paling membutuhkan perhatian untuk pengoptimalan. Namun, itu tidak datang dengan pustaka python standar dan perlu diinstal menggunakan perintah berikut:
pip install line_profiler
Contoh
from line_profiler import LineProfiler
def sum_arrays(): # creating large arrays arr1 = [3] * (5 ** 10) arr2 = [4] * (3 ** 11) return arr1 + arr2 lp = LineProfiler()
lp.add_function(sum_arrays)
lp.run('sum_arrays()')
lp.print_stats()
Keluaran
Timer unit: 1e-07 s
Total time: 0.0562143 s
File: e:KDnuggetsPython_Profilerslineprofiler.py
Function: sum_arrays at line 2
Garis # | Hits | Waktu | Per Pukulan | % Waktu | Isi Baris |
2 | def jumlah_array(): | ||||
3 | # membuat array besar | ||||
4 | 1 | 168563.0 | 168563.0 | 30.0 | arr1 = [1] * (10 ** 6) |
5 | 1 | 3583.0 | 3583.0 | 0.6 | arr2 = [2] * (2 * 10 ** 7) |
6 | 1 | 389997.0 | 389997.0 | 69.4 | kembalikan arr1 + arr2 |
- Baris # = Nomor baris dalam file kode Anda
- Hits = Tidak ada kali dieksekusi
- Time = Total waktu yang dihabiskan untuk mengeksekusi baris
- Per Hit = Rata-rata waktu yang dihabiskan per hit
- % Waktu = Persentase waktu yang dihabiskan pada baris relatif terhadap total waktu fungsi
- Isi Baris = Kode Sumber Aktual
Profiler memori adalah profiler python yang melacak alokasi memori kode Anda. Itu juga dapat menghasilkan grafik nyala untuk membantu menganalisis penggunaan memori dan mengidentifikasi kebocoran memori dalam kode Anda. Ini juga berguna untuk mengidentifikasi daerah hotspot yang menyebabkan banyak alokasi karena aplikasi python seringkali rentan terhadap masalah manajemen memori. Profiler memori membuat profil statistik baris demi baris tentang konsumsi memori dan perlu diinstal menggunakan perintah berikut:
pip install memory_profiler
Contoh
import memory_profiler
import random def avg_marks(): # Genrating Random marks for 50 students for each section sec_a = random.sample(range(0, 100), 50) sec_b = random.sample(range(0, 100), 50) # combined average marks of two sections avg_a = sum(sec_a) / len(sec_a) avg_b = sum(sec_b) / len(sec_b) combined_avg = (avg_a + avg_b)/2 return combined_avg memory_profiler.profile(avg_marks)()
Keluaran
Filename: e:KDnuggetsPython_Profilersmemoryprofiler.py
Garis # | penggunaan Mem | Kenaikan | Kejadian | Isi Baris |
4 | 21.7 MiB | 21.7 MiB | 1 | def rata-rata_marks(): |
5 | # Menghasilkan nilai Acak untuk 50 siswa untuk setiap bagian | |||
6 | 21.8 MiB | 0.0 MiB | 1 | sec_a = acak.sample(rentang(0, 100), 50) |
7 | 21.8 MiB | 0.0 MiB | 1 | sec_b = acak.sample(rentang(0, 100), 50) |
8 | ||||
9 | # nilai rata-rata gabungan dari dua bagian | |||
10 | 21.8 MiB | 0.0 MiB | 1 | avg_a = jumlah(detik_a) / len(detik_a) |
11 | 21.8 MiB | 0.0 MiB | 1 | avg_b = jumlah(detik_b) / len(detik_b) |
12 | 21.8 MiB | 0.0 MiB | 1 | gabungan_avg = (avg_a + avg_b)/2 |
13 | 21.8 MiB | 0.0 MiB | 1 | mengembalikan gabungan_rata-rata |
- Baris # = Nomor baris dalam file kode Anda
- Penggunaan Mem = Penggunaan memori dari Python Interpreter
- Kenaikan = Selisih memori yang dikonsumsi dari baris saat ini dengan yang sebelumnya
- Occurences = Tidak ada kali baris kode dieksekusi
- Isi Baris = Kode Sumber Aktual
Timeit adalah pustaka Python bawaan yang dirancang khusus untuk mengevaluasi kinerja cuplikan kode kecil. Ini adalah alat yang ampuh yang dapat membantu Anda mengidentifikasi dan mengoptimalkan hambatan kinerja dalam kode Anda, memungkinkan Anda untuk menulis kode lebih cepat dan lebih efisien. Implementasi yang berbeda dari suatu algoritma juga dapat dibandingkan dengan menggunakan modul timeit tetapi sisi negatifnya adalah bahwa hanya baris kode individu yang dapat dianalisis menggunakannya.
Contoh
import timeit
code_to_test = """
# creating large arrays
arr1 = [3] * (5 ** 10)
arr2 = [4] * (3 ** 11)
arr1 + arr2 """
elapsed_time = timeit.timeit(code_to_test, number=10)
print(f'Elapsed time: {elapsed_time}')
Keluaran
Elapsed time: 1.3809973997995257
Penggunaannya terbatas hanya untuk mengevaluasi cuplikan kode yang lebih kecil. Satu hal penting yang perlu diperhatikan adalah ini menampilkan waktu yang berbeda setiap kali cuplikan kode dijalankan. Ini karena Anda mungkin memiliki proses lain yang berjalan di komputer Anda dan alokasi sumber daya dapat bervariasi dari satu proses ke proses lainnya, sehingga sulit untuk mengontrol semua variabel dan mencapai waktu pemrosesan yang sama untuk setiap proses.
Yappi adalah profiler python yang memungkinkan Anda mengidentifikasi hambatan kinerja dengan mudah. Itu ditulis dalam C, menjadikannya salah satu profiler paling efisien yang tersedia. Ini memiliki API yang dapat disesuaikan yang memungkinkan Anda hanya membuat profil bagian tertentu dari kode Anda yang perlu Anda fokuskan, memberi Anda lebih banyak kontrol atas proses pembuatan profil. Kemampuannya untuk memprofilkan coroutine secara bersamaan memberikan pemahaman mendalam tentang cara kerja kode Anda.
Contoh
import yappi
def sum_arrays(): # creating large arrays arr1 = [3] * (5 ** 10) arr2 = [4] * (3 ** 11) return arr1 + arr2 with yappi.run(builtins=True): final_arr = sum_arrays() print("n--------- Function Stats -----------")
yappi.get_func_stats().print_all() print("n--------- Thread Stats -----------")
yappi.get_thread_stats().print_all() print("nYappi Backend Types: ",yappi.BACKEND_TYPES)
print("Yappi Clock Types: ", yappi.CLOCK_TYPES)
Catatan: Instal yappi menggunakan perintah ini:
pip install yappi
Keluaran
--------- Function Stats ----------- Clock type: CPU
Ordered by: totaltime, desc
nama | panggilan | tsub | itu | tag |
..lersyappiProfiler.py:4 sum_arrays | 1 | 0.109375 | 0.109375 | 0.109375 |
bawaan. Berikutnya | 1 | 0.000000 | 0.000000 | 0.000000 |
.. _GeneratorContextManager.__exit__ | 1 | 0.000000 | 0.000000 | 0.000000 |
——— Utas Statistik ———–
nama | id | waktu | itu | aroma |
_Utas Utama | 0 | 15148 | 0.187500 | 1 |
Yappi Backend Types: {'NATIVE_THREAD': 0, 'GREENLET': 1}
Yappi Clock Types: {'WALL': 0, 'CPU': 1}
Ingatlah untuk memberi nama modul Anda secara berbeda untuk modul bawaan. Jika tidak, impor akan mengimpor modul Anda (yaitu file python Anda) alih-alih modul bawaan yang sebenarnya.
Dengan menggunakan profiler ini, developer dapat mengidentifikasi kemacetan dalam kode mereka dan memutuskan penerapan mana yang terbaik. Dengan alat yang tepat dan sedikit pengetahuan, siapa pun dapat membawa kode Python mereka ke tingkat kinerja berikutnya. Jadi, bersiaplah untuk mengoptimalkan pengoptimalan kinerja Python Anda dan saksikan itu melambung ke ketinggian baru!
Saya senang Anda memutuskan untuk membaca artikel ini dan saya harap ini menjadi pengalaman berharga bagi Anda.
Kanwal Mehreen adalah pengembang perangkat lunak yang bercita-cita tinggi dengan minat dalam ilmu data dan aplikasi AI dalam kedokteran. Kanwal terpilih sebagai Google Generation Scholar 2022 untuk wilayah APAC. Kanwal suka berbagi pengetahuan teknis dengan menulis artikel tentang topik yang sedang tren, dan bersemangat untuk meningkatkan representasi perempuan di industri teknologi.
- Konten Bertenaga SEO & Distribusi PR. Dapatkan Amplifikasi Hari Ini.
- Platoblockchain. Intelijen Metaverse Web3. Pengetahuan Diperkuat. Akses Di Sini.
- Sumber: https://www.kdnuggets.com/2023/02/optimizing-python-code-performance-deep-dive-python-profilers.html?utm_source=rss&utm_medium=rss&utm_campaign=optimizing-python-code-performance-a-deep-dive-into-python-profilers
- 1
- 10
- 100
- 11
- 2022
- 7
- 9
- a
- kemampuan
- Tentang Kami
- Mencapai
- AI
- AI dalam kedokteran
- algoritma
- Semua
- alokasi
- alokasi
- Membiarkan
- memungkinkan
- menganalisa
- dan
- siapapun
- APAC
- api
- aplikasi
- artikel
- artikel
- bercita-cita tinggi
- perhatian
- tersedia
- rata-rata
- Backend
- karena
- TERBAIK
- Lebih baik
- Bit
- Blok
- bug
- built-in
- panggilan
- bernama
- Panggilan
- menyebabkan
- Clock
- kode
- bergabung
- bagaimana
- dibandingkan
- komputer
- bersamaan
- dikonsumsi
- konsumsi
- isi
- kontrol
- CPU
- membuat
- terbaru
- disesuaikan
- data
- ilmu data
- set data
- memutuskan
- mendalam
- menyelam dalam
- Default
- dirancang
- terperinci
- Pengembang
- pengembang
- perbedaan
- berbeda
- sulit
- langsung
- menampilkan
- Kelemahan
- dinamis
- setiap
- mudah
- efisien
- Eter (ETH)
- mengevaluasi
- Setiap
- contoh
- menjalankan
- eksekusi
- pengalaman
- lebih cepat
- File
- Fokus
- berikut
- sering
- dari
- fungsi
- berfungsi
- menghasilkan
- menghasilkan
- generasi
- mendapatkan
- Pemberian
- grafik
- membantu
- Memukul
- berharap
- hotspot
- Seterpercayaapakah Olymp Trade? Kesimpulan
- Namun
- HTTPS
- mengenali
- mengidentifikasi
- implementasi
- mengimpor
- penting
- meningkatkan
- in
- secara mendalam
- menunjukkan
- sendiri-sendiri
- industri
- informasi
- install
- sebagai gantinya
- bunga
- masalah
- IT
- KDnugget
- Tajam
- pengetahuan
- Bahasa
- besar
- kebocoran
- Lets
- Tingkat
- Perpustakaan
- Terbatas
- baris
- baris
- sedikit
- hidup
- data langsung
- melihat
- Lot
- LP
- Membuat
- pengelolaan
- obat
- Memori
- metode
- metode
- modul
- Modul
- Memantau
- lebih
- lebih efisien
- paling
- nama
- Perlu
- kebutuhan
- New
- berikutnya
- jumlah
- nomor
- ONE
- optimasi
- Optimize
- mengoptimalkan
- Lainnya
- jika tidak
- bagian
- bergairah
- persentase
- prestasi
- melakukan
- plato
- Kecerdasan Data Plato
- Data Plato
- miskin
- kuat
- kehadiran
- sebelumnya
- proses
- proses
- pengolahan
- Profil
- profil
- program
- Pemrograman
- bahasa pemrograman
- memberikan
- menyediakan
- Ular sanca
- acak
- Baca
- siap
- nyata
- wilayah
- daerah
- perwakilan
- Sumber
- kembali
- Run
- berjalan
- sama
- Ilmu
- detik
- Bagian
- bagian
- terpilih
- set
- Share
- tunggal
- kecil
- lebih kecil
- So
- Perangkat lunak
- beberapa
- sumber
- kode sumber
- tertentu
- Secara khusus
- menghabiskan
- standar
- statistika
- statistik
- Siswa
- Menderita
- cocok
- sistem
- Mengambil
- tech
- industri teknologi
- Teknis
- Grafik
- Sumber
- mereka
- hal
- waktu
- kali
- untuk
- alat
- alat
- Topik
- Total
- perangkap
- trending
- jenis
- pemahaman
- satuan
- penggunaan
- menggunakan
- Berharga
- Menonton
- yang
- sangat
- akan
- Wanita
- wanita di bidang teknologi
- menulis
- penulisan
- tertulis
- Anda
- zephyrnet.dll