Saya memiliki program baris perintah dengan Python yang membutuhkan waktu cukup lama untuk menyelesaikannya. Saya ingin tahu waktu yang tepat untuk menyelesaikan berlari.
Saya telah melihat timeit
modul, tetapi tampaknya itu hanya untuk potongan kode kecil. Saya ingin mengatur waktu seluruh program.
round(time.time() - start_time, 2)
(atau desimal apa pun yang Anda inginkan), saya mendapatkan angka ilmiah kembali seperti 1.24e-5.'%.2f'
bukannya diround()
sini.Saya meletakkan
timing.py
modul ini kesite-packages
direktori saya sendiri , dan cukup masukkanimport timing
di bagian atas modul saya:Saya juga dapat menelepon
timing.log
dari dalam program saya jika ada tahapan signifikan dalam program yang ingin saya tampilkan. Tetapi hanya dengan memasukkanimport timing
akan mencetak waktu mulai dan berakhir, dan keseluruhan waktu yang berlalu. (MaafkansecondsToStr
fungsi tidak jelas saya , itu hanya memformat angka floating point detik ke jj: mm: dd. Sss.)Catatan: Versi Python 3 dari kode di atas dapat ditemukan di sini atau di sini .
sumber
from functools import reduce
di bagian atas dan letakkan tanda kurung di setiap pernyataan cetak. Bagus sekali!Di Linux atau Unix:
Di Windows, lihat pertanyaan StackOverflow ini: Bagaimana cara mengukur waktu eksekusi suatu perintah pada baris perintah Windows?
Untuk keluaran yang lebih banyak,
sumber
secondsToStr()
fungsinya.Saya sangat suka jawaban Paul McGuire , tetapi saya menggunakan Python 3. Jadi bagi mereka yang tertarik: inilah modifikasi dari jawabannya yang bekerja dengan Python 3 di * nix (saya membayangkan, di bawah Windows, yang
clock()
seharusnya digunakan sebagai gantinyatime()
):Jika Anda menemukan ini berguna, Anda masih harus memilih suara jawabannya, bukan yang ini, karena ia melakukan sebagian besar pekerjaan;).
sumber
timedelta(seconds=t).total_seconds()
bermanfaat.time.clock()
mengembalikan waktu prosesor, yang memungkinkan kita untuk menghitung hanya waktu yang digunakan oleh proses ini (toh pada Unix). Dokumentasi mengatakan "dalam hal apapun, ini adalah fungsi yang digunakan untuk pembandingan algoritma Python atau pewaktuan"sumber
Saya suka output yang
datetime
disediakan modul, di mana objek delta menunjukkan hari, jam, menit, dll sebagaimana diperlukan dengan cara yang dapat dibaca manusia.Sebagai contoh:
Contoh output misalnya
atau
Seperti yang disebutkan JF Sebastian, pendekatan ini mungkin menghadapi beberapa kasus rumit dengan waktu setempat, jadi lebih aman untuk digunakan:
sumber
timedelta(seconds=time.monotonic()-start)
sini (atautime.time()
jika intervalnya besar). Jangan kurangi objek waktu naif yang mewakili waktu setempat; waktu setempat tidak monotonstart_time = time.monotonic(); end_time = time.monotonic(); timedelta(seconds=end_time - start_time)
. Saya percaya Anda benar, tetapi kemudian Anda juga harus memformatnya, saat Anda kembalidatetime.timedelta(0, 0, 76)
. Juga, tampaknya metode monoton hanya ditambahkan dalam Python 3.str()
untuk menjadikannya "manusia". Saya akan memperbarui jawabannya, terima kasih.Anda dapat menggunakan cProfile profiler Python untuk mengukur waktu CPU dan juga berapa banyak waktu yang dihabiskan di dalam setiap fungsi dan berapa kali setiap fungsi dipanggil. Ini sangat berguna jika Anda ingin meningkatkan kinerja skrip Anda tanpa tahu harus mulai dari mana. Jawaban untuk pertanyaan Stack Overflow ini cukup bagus. Itu selalu baik untuk melihat dalam dokumentasi juga.
Berikut ini contoh cara membuat profil skrip menggunakan cProfile dari baris perintah:
sumber
X function calls in Y CPU seconds
. Jika Anda ingin waktu jam dinding, gunakan salah satu jawaban lain di sini.Bahkan lebih baik untuk Linux:
time
sumber
time.clock ()
time.perf_counter ()
time.process_time ()
sumber
Cukup gunakan
timeit
modul. Ia bekerja dengan Python 2 dan Python 3.Itu kembali dalam hitungan detik dan Anda dapat memiliki waktu eksekusi Anda. Ini sederhana, tetapi Anda harus menulis ini di fungsi utama yang memulai eksekusi program. Jika Anda ingin mendapatkan waktu eksekusi bahkan ketika Anda mendapatkan kesalahan maka ambil parameter "Mulai" untuk itu dan hitung di sana seperti:
sumber
finally
bagian?Cuplikan berikut ini mencetak waktu yang telah berlalu dalam
<HH:MM:SS>
format yang dapat dibaca manusia .sumber
sumber
Di IPython , "timeit" skrip apa pun:
sumber
Ini menjalankan
your_module.main()
fungsi satu kali dan mencetak waktu yang telah berlalu menggunakantime.time()
fungsi sebagai penghitung waktu.Untuk mengemulasi
/usr/bin/time
Python, lihat subproses Python dengan / usr / bin / time: bagaimana cara menangkap informasi timing tetapi mengabaikan semua output lainnya? .Untuk mengukur waktu CPU (mis., Jangan menyertakan waktu selama
time.sleep()
) untuk setiap fungsi, Anda dapat menggunakanprofile
modul (cProfile
pada Python 2):Anda bisa meneruskan
-p
ketimeit
perintah di atas jika Anda ingin menggunakan penghitung waktu yang sama seperti yangprofile
digunakan modul.Lihat Bagaimana Anda bisa membuat profil skrip Python?
sumber
Saya juga menyukai jawaban Paul McGuire dan menghasilkan formulir manajer konteks yang lebih sesuai dengan kebutuhan saya.
sumber
Untuk data orang-orang menggunakan Notebook Jupyter
Dalam sel, Anda dapat menggunakan
%%time
perintah ajaib Jupyter untuk mengukur waktu eksekusi:Keluaran
Ini hanya akan menangkap waktu eksekusi sel tertentu. Jika Anda ingin menangkap waktu eksekusi seluruh buku catatan (yaitu program), Anda dapat membuat buku catatan baru di direktori yang sama dan di buku catatan baru jalankan semua sel:
Misalkan notebook di atas disebut
example_notebook.ipynb
. Di buku catatan baru dalam direktori yang sama:Keluaran
sumber
Ada
timeit
modul yang dapat digunakan untuk mengatur waktu waktu eksekusi kode Python.Ini memiliki dokumentasi rinci dan contoh dalam dokumentasi Python, 26.6. timeit - Mengukur waktu eksekusi dari cuplikan kode kecil .
sumber
timeit
dalam pertanyaan. Pertanyaannya adalah bagaimana bisa digunakan di sini (atau haruskah digunakan di sini dan apa alternatifnya). Inilah jawaban yang mungkin .Gunakan line_profiler .
line_profiler akan membuat profil waktu yang dibutuhkan setiap baris kode untuk dieksekusi. Profiler diimplementasikan dalam C via Cython untuk mengurangi overhead profiling.
Hasilnya akan:
sumber
Saya menggunakan fungsi yang sangat sederhana untuk mengatur waktu bagian dari eksekusi kode:
Dan untuk menggunakannya, panggil saja sebelum kode untuk mengukur untuk mengambil waktu fungsi, dan kemudian memanggil fungsi setelah kode dengan komentar. Waktu akan muncul di depan komentar. Sebagai contoh:
Maka hasilnya akan terlihat seperti ini:
sumber
Saya mengalami masalah yang sama di banyak tempat, jadi saya membuat paket kenyamanan
horology
. Anda dapat menginstalnya denganpip install horology
dan kemudian melakukannya dengan cara yang elegan:akan menampilkan:
Atau bahkan lebih sederhana (jika Anda memiliki satu fungsi):
akan menampilkan:
Membutuhkan unit dan pembulatan. Ini bekerja dengan python 3.6 atau lebih baru.
sumber
main.interval
.Ini jawaban Paul McGuire yang cocok untuk saya. Untuk berjaga-jaga jika seseorang mengalami kesulitan menjalankan yang itu.
Panggilan
timing.main()
dari program Anda setelah mengimpor file.sumber
Timeit adalah kelas dalam Python yang digunakan untuk menghitung waktu eksekusi kode blok kecil.
Default_timer adalah metode di kelas ini yang digunakan untuk mengukur waktu jam dinding, bukan waktu eksekusi CPU. Dengan demikian eksekusi proses lain dapat mengganggu ini. Jadi ini berguna untuk blok kode kecil.
Contoh kode adalah sebagai berikut:
sumber
timeit
adalah jawaban IMO yang lebih baik untuk banyak contoh.Jawaban nanti, tetapi saya menggunakan
timeit
:code_to_test
.number
argumen menentukan berapa kali kode harus diulang.sumber
Waktu tindakan eksekusi program Python bisa tidak konsisten tergantung pada:
Ini karena cara yang paling efektif adalah menggunakan "Orde Pertumbuhan" dan mempelajari notasi "O" yang besar untuk melakukannya dengan benar.
Bagaimanapun, Anda dapat mencoba mengevaluasi kinerja program Python dalam langkah-langkah penghitungan mesin spesifik per detik menggunakan algoritma sederhana ini: sesuaikan ini dengan program yang ingin Anda evaluasi
sumber
Anda melakukan ini hanya dengan Python. Tidak perlu membuatnya rumit.
sumber
Mirip dengan respons dari @rogeriopvl saya menambahkan sedikit modifikasi untuk mengkonversi ke detik menit menggunakan perpustakaan yang sama untuk pekerjaan yang berjalan lama.
Output Sampel
sumber
Pertama, instal humanfriendly paket dengan membuka Command Prompt (CMD) sebagai administrator dan ketik di sana -
pip install humanfriendly
Kode:
Keluaran:
sumber
Untuk menggunakan jawaban metakermit yang diperbarui untuk Python 2.7, Anda akan memerlukan paket monoton .
Kode tersebut akan menjadi sebagai berikut:
sumber
Saya mencoba dan menemukan perbedaan waktu menggunakan skrip berikut.
sumber
Jika Anda ingin mengukur waktu dalam mikrodetik, maka Anda dapat menggunakan versi berikut, berdasarkan sepenuhnya pada jawaban Paul McGuire dan Nicojo - ini adalah kode Python 3. Saya juga menambahkan beberapa warna ke dalamnya:
log () => fungsi yang mencetak informasi waktu.
txt ==> argumen pertama untuk dicatat, dan string-nya untuk menandai waktu.
atexit ==> Modul Python untuk mendaftarkan fungsi yang dapat Anda panggil saat program keluar.
sumber