Dengan modul Waktu dalam python apakah mungkin untuk mengukur waktu yang telah berlalu? Jika demikian, bagaimana saya melakukannya?
Saya perlu melakukan ini sehingga jika kursor berada dalam widget untuk jangka waktu tertentu suatu peristiwa terjadi.
time.time()
salah. Contoh paling sederhana adalah jika waktu sistem berubah selama periode pengukuran.time.time()
untuk mengukur waktu yang telah berlalu dalam python modern (dipengaruhi oleh perubahan manual, melayang, detik kabisat dll). Jawaban ini di bawah kebutuhan untuk menjadi lebih tinggi, mengingat pertanyaan ini sekarang hasil teratas di Google untuk mengukur waktu yang telah berlalu.time.time()
.Jawaban:
Anda juga dapat menulis dekorator sederhana untuk menyederhanakan pengukuran waktu eksekusi berbagai fungsi:
Pemakaian:
Anda dapat membuat profil lebih dari satu fungsi secara bersamaan. Kemudian untuk mencetak pengukuran cukup panggil print_prof_data ():
sumber
pip install profilehooks
, dan beranda di sinitime.monotonic()
daripadatime.time()
saat mengukur batas waktu atau durasi. docs.python.org/3/library/time.html#time.monotonictime.time()
akan melakukan pekerjaan.Anda mungkin ingin melihat pertanyaan ini , tetapi saya pikir itu tidak perlu.
sumber
time.time()
adalah ide yang buruk karena jam sistem dapat diatur ulang yang akan membuat Anda kembali ke masa lalu.time.monotonic()
mengurus ini (monoton = hanya berjalan maju).time.perf_counter()
juga monoton tetapi memiliki akurasi lebih tinggi, jadi ini direkomendasikan untuk waktu jam dinding.Untuk pengguna yang menginginkan pemformatan yang lebih baik,
akan dicetak, selama 2 detik:
dan selama 7 menit satu detik:
perhatikan bahwa satuan waktu minimum dengan gmtime adalah detik. Jika Anda membutuhkan mikrodetik pertimbangkan hal berikut:
dokumentasi strftime
sumber
e = time.time() - start_time ; print("%02d:%02d:%02d" % (e // 3600, (e % 3600 // 60), (e % 60 // 1)))
hasil yang hampir sama serta mencakup situasi berlalu lebih dari 24 jam.time.monotonic()
seperti pada jawaban lainnya?elapsed.seconds
akan salah jika durasinya lebih dari satu hari. Anda inginelapsed.total_seconds()
menjadi tangguhUntuk ukuran waktu berlalu terbaik (sejak Python 3.3), gunakan
time.perf_counter()
.Untuk pengukuran pada urutan jam / hari, Anda tidak peduli dengan resolusi sub-detik jadi gunakan
time.monotonic()
saja.Dalam banyak implementasi, ini mungkin sebenarnya hal yang sama.
Sebelum 3.3, Anda terjebak dengan
time.clock()
.Perbarui untuk Python 3.7
Baru dalam Python 3.7 adalah PEP 564 - Tambahkan fungsi waktu baru dengan resolusi nanodetik.
Penggunaan ini lebih lanjut dapat menghilangkan kesalahan pembulatan dan titik mengambang, terutama jika Anda mengukur periode yang sangat singkat, atau aplikasi Anda (atau mesin Windows) sudah berjalan lama.
Resolusi mulai mogok
perf_counter()
setelah sekitar 100 hari. Jadi misalnya setelah satu tahun uptime, interval terpendek (lebih besar dari 0) dapat diukur akan lebih besar daripada ketika dimulai.Perbarui untuk Python 3.8
time.clock
sekarang hilang.sumber
Untuk periode yang lebih lama.
akan dicetak
jika lebih dari 24 jam
Itu terinspirasi oleh jawaban Rutger Hofste. Rutger terima kasih!
sumber
Anda perlu mengimpor waktu dan kemudian menggunakan metode time.time () untuk mengetahui waktu saat ini.
sumber
Cara lain yang bagus untuk mengatur waktu adalah menggunakan struktur dengan python.
dengan struktur secara otomatis memanggil __enter__ dan __exit__ metode yang tepat apa yang kita butuhkan untuk waktu hal.
Mari kita buat kelas Timer .
Kemudian, seseorang dapat menggunakan kelas Timer seperti ini:
Hasilnya adalah sebagai berikut:
Bilangan Primer: [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 79, 79, 89, 89 , 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 223, 227 , 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 301, 311, 313, 317, 331, 337, 347, 349, 359, 353, 359, 367, 373 , 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 497, 491, 499]
Waktu yang berlalu untuk menghitung beberapa bilangan prima: 5.01704216003418ms
sumber
Tanggapan Vadim Shender sangat bagus. Anda juga dapat menggunakan dekorator sederhana seperti di bawah ini:
sumber
Dalam pemrograman, ada 2 cara utama untuk mengukur waktu , dengan hasil yang berbeda:
Waktu Prosesor : Ini adalah berapa lama proses spesifik ini digunakan secara aktif pada CPU. Tidur, menunggu permintaan web, atau waktu ketika hanya proses lain dieksekusi tidak akan berkontribusi untuk ini.
time.process_time()
Waktu Jam Dinding : Ini mengacu pada berapa banyak waktu yang telah berlalu "pada jam yang tergantung di dinding", yaitu di luar waktu nyata.
Menggunakan
time.perf_counter()
time.time()
juga mengukur waktu jam dinding tetapi dapat diatur ulang, sehingga Anda dapat kembali ke masa lalutime.monotonic()
tidak dapat diatur ulang (monoton = hanya berjalan maju) tetapi memiliki presisi lebih rendah daritime.perf_counter()
sumber
Berikut ini adalah pembaruan untuk kode pintar Vadim Shender dengan output tabular:
sumber