Manakah yang lebih baik digunakan untuk menentukan waktu dengan Python? time.clock () atau time.time ()? Mana yang lebih akurat?
sebagai contoh:
start = time.clock()
... do something
elapsed = (time.clock() - start)
vs.
start = time.time()
... do something
elapsed = (time.time() - start)
time.clock()
sudah usang , dan disarankan untuk menggunakanperf_counter()
atauprocess_time()
sebagai gantinya.timeit.default_timer()
untuk mengukur kinerja (ditugaskan ke time.time () atau time.clock () tergantung pada OS) .time.clock
dantime.process_time
, tetapi proses anak tidak. Lihat juga pembahasan ketepatan ini (tentu saja, bervariasi menurut sistem).Jawaban:
Pada 3.3, time.clock () sudah usang , dan disarankan untuk menggunakan time.process_time () atau time.perf_counter () sebagai gantinya.
Sebelumnya di 2.7, sesuai dengan dokumen modul waktu :
Selain itu, ada modul timeit untuk cuplikan kode pembandingan.
sumber
time.clock()
itu tergantung pada platform, dantime.process_time()
tidak. Ini adalah alasan mengapatime.clock()
sudah usang.Jawaban singkatnya adalah: sebagian besar waktu
time.clock()
akan lebih baik. Namun, jika Anda menghitung waktu beberapa perangkat keras (misalnya beberapa algoritma yang Anda masukkan ke dalam GPU), makatime.clock()
akan membuang waktu ini dantime.time()
merupakan satu-satunya solusi yang tersisa.Catatan: apa pun metode yang digunakan, waktunya akan tergantung pada faktor-faktor yang tidak dapat Anda kendalikan (kapan proses akan beralih, seberapa sering, ...), ini lebih buruk dengan
time.time()
tetapi ada juga dengantime.clock()
, jadi Anda tidak boleh menjalankan satu tes waktu saja, tetapi selalu jalankan serangkaian tes dan lihat mean / varians dari kali.sumber
Lainnya telah menjawab re:
time.time()
vstime.clock()
.Namun, jika Anda menentukan waktu pelaksanaan blok kode untuk tujuan pembandingan / pembuatan profil, Anda harus melihat pada
timeit
modul .sumber
timeit.default_timer
ditugaskan ketime.time()
atautime.clock()
tergantung pada OS. Pada Python 3.3+default_timer
adatime.perf_counter()
di semua platform.Satu hal yang perlu diingat: Mengubah waktu sistem memengaruhi
time.time()
tetapi tidaktime.clock()
.Saya perlu mengendalikan beberapa eksekusi tes otomatis. Jika satu langkah dari test case membutuhkan lebih dari jumlah waktu tertentu, TC itu dibatalkan untuk melanjutkan dengan yang berikutnya.
Tetapi kadang-kadang diperlukan langkah untuk mengubah waktu sistem (untuk memeriksa modul penjadwal aplikasi yang sedang diuji), jadi setelah mengatur waktu sistem beberapa jam di masa mendatang, batas waktu TC berakhir dan kasus uji dibatalkan. Saya harus beralih dari
time.time()
ketime.clock()
untuk menangani ini dengan benar.sumber
clock()
-> nomor floating pointKembalikan waktu CPU atau waktu nyata sejak awal proses atau sejak panggilan pertama
clock()
. Ini memiliki ketepatan yang sama seperti catatan sistem.time()
-> nomor floating pointKembalikan waktu saat ini dalam detik sejak Zaman. Pecahan dari satu detik dapat hadir jika jam sistem menyediakannya.
Biasanya
time()
lebih tepat, karena sistem operasi tidak menyimpan waktu proses berjalan dengan presisi mereka menyimpan waktu sistem (yaitu, waktu aktual)sumber
Tergantung pada apa yang Anda pedulikan. Jika yang Anda maksud WALL TIME (seperti dalam, waktu pada jam di dinding Anda), time.clock () memberikan akurasi TIDAK karena dapat mengatur waktu CPU.
sumber
time.clock()
server Linux dan angka yang saya dapatkan bukan detiktime()
memiliki presisi yang lebih baik daripadaclock()
di Linux.clock()
hanya memiliki presisi kurang dari 10 ms. Sementaratime()
memberikan presisi prefek. Tes saya pada CentOS 6.4, python 2.6using clock():
sumber
Perbedaannya sangat spesifik platform.
clock () sangat berbeda di Windows daripada di Linux, misalnya.
Untuk jenis contoh yang Anda jelaskan, Anda mungkin menginginkan modul "timeit".
sumber
clock
yang"very different"
?Seperti orang lain telah mencatat
time.clock()
sudah ditinggalkan mendukungtime.perf_counter()
atautime.process_time()
, tapi Python 3.7 memperkenalkan nanodetik resolusi waktu dengantime.perf_counter_ns()
,time.process_time_ns()
, dantime.time_ns()
, bersama dengan 3 fungsi lainnya.6 fungsi resolusi nansecond baru ini dirinci dalam PEP 564 :
Seperti yang telah dicatat orang lain, gunakan
timeit
modul untuk fungsi waktu dan cuplikan kode kecil.sumber
Pada waktu Unix time.clock () mengukur jumlah waktu CPU yang telah digunakan oleh proses saat ini, jadi tidak ada gunanya untuk mengukur waktu yang telah berlalu dari beberapa titik di masa lalu. Pada Windows, ini akan mengukur detik jam dinding yang berlalu sejak panggilan pertama ke fungsi. Pada kedua sistem time.time () akan mengembalikan detik yang berlalu sejak zaman.
Jika Anda menulis kode yang dimaksudkan hanya untuk Windows, keduanya akan berfungsi (meskipun Anda akan menggunakan keduanya secara berbeda - tidak perlu pengurangan untuk time.clock ()). Jika ini akan berjalan pada sistem Unix atau Anda menginginkan kode yang dijamin portabel, Anda akan ingin menggunakan time.time ().
sumber
Jawaban singkat: gunakan time.clock () untuk menghitung waktu dengan Python.
Pada sistem * nix, clock () mengembalikan waktu prosesor sebagai angka floating point, dinyatakan dalam detik. Pada Windows, ia mengembalikan detik yang telah berlalu sejak panggilan pertama ke fungsi ini, sebagai nomor floating point.
time () mengembalikan detik sejak zaman, dalam UTC, sebagai angka floating point. Tidak ada jaminan bahwa Anda akan mendapatkan ketepatan yang lebih baik yaitu 1 detik (meskipun waktu () mengembalikan angka floating point). Juga perhatikan bahwa jika jam sistem telah diatur kembali antara dua panggilan ke fungsi ini, panggilan fungsi kedua akan mengembalikan nilai yang lebih rendah.
sumber
Untuk yang terbaik dari pemahaman saya, time.clock () memiliki ketepatan sebanyak sistem Anda akan memungkinkannya.
sumber
Saya menggunakan kode ini untuk membandingkan 2 metode. OS saya adalah windows 8, prosesor inti i5, RAM 4GB
keluaran:
waktu () = 0,0993799996376
jam () = 0,0993572257367
sumber
Jawaban yang benar: Keduanya memiliki fraksi yang sama.
Tapi yang lebih cepat jika
subject
initime
?Sebuah test case kecil :
Saya tidak bekerja di laboratorium Swiss tapi saya sudah menguji ..
Berdasarkan pertanyaan ini:
time.clock()
lebih baik daripadatime.time()
Sunting:
time.clock()
adalah penghitung internal sehingga tidak dapat digunakan di luar, mendapat batasanmax 32BIT FLOAT
, tidak dapat melanjutkan penghitungan jika tidak menyimpan nilai pertama / terakhir. Tidak dapat menggabungkan satu konter lain ...sumber
time.clock()
dihapus di Python 3.8 karena memiliki perilaku yang bergantung pada platform :Di Windows , fungsi ini mengembalikan detik jam dinding yang berlalu sejak panggilan pertama ke fungsi ini, sebagai nomor titik mengambang
Jadi, fungsi mana yang harus dipilih?
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
Membandingkan hasil pengujian antara Ubuntu Linux dan Windows 7.
Di Ubuntu
Di Windows 7
sumber