Cái nào tốt hơn để sử dụng cho thời gian trong Python? time.clock () hoặc time.time ()? Cái nào cung cấp độ chính xác cao hơn?
ví dụ:
start = time.clock()
... do something
elapsed = (time.clock() - start)
vs.
start = time.time()
... do something
elapsed = (time.time() - start)
Kể từ ngày 3.3, time.clock () không được dùng nữa và nên sử dụng thời gian . process_time () hoặc time.perf_corer () thay vào đó.
Trước đây trong 2.7, theo tài liệu mô-đun thời gian:
thời gian.clock ()
Trên Unix, trả về thời gian của bộ xử lý hiện tại dưới dạng số dấu phẩy động được biểu thị bằng giây. Độ chính xác, và trên thực tế, chính là định nghĩa về ý nghĩa của bộ xử lý thời gian, bộ xử lý, tùy thuộc vào chức năng C cùng tên, nhưng trong mọi trường hợp, đây là chức năng sử dụng để đo điểm chuẩn Python hoặc thuật toán thời gian.
Trên Windows, hàm này trả về giây đồng hồ treo tường đã trôi qua kể từ lần gọi đầu tiên đến hàm này, dưới dạng số dấu phẩy động, dựa trên hàm Win32 QueryPerformanceCorer (). Độ phân giải thường tốt hơn một micro giây.
Ngoài ra, còn có mô-đun timeit để lấy đoạn mã chuẩn.
Câu trả lời ngắn gọn là: hầu hết thời gian time.clock()
sẽ tốt hơn. Tuy nhiên, nếu bạn định thời gian cho một số phần cứng (ví dụ: một số thuật toán bạn đặt trong GPU), thì time.clock()
sẽ thoát khỏi thời điểm này và time.time()
là giải pháp duy nhất còn lại.
Lưu ý: dù sử dụng phương pháp nào, thời gian sẽ phụ thuộc vào các yếu tố bạn không thể kiểm soát (khi nào thì quá trình chuyển đổi, tần suất, ...), điều này tệ hơn với time.time()
nhưng cũng tồn tại với time.clock()
, vì vậy bạn không bao giờ nên chạy thử nghiệm thời gian chỉ, nhưng luôn luôn chạy một loạt thử nghiệm và xem xét trung bình/phương sai của thời đại.
Những người khác đã trả lời lại: time.time()
so với time.clock()
.
Tuy nhiên, nếu bạn định thời gian thực hiện một khối mã cho mục đích đo điểm chuẩn/lược tả, bạn nên xem mô đun timeit
NAME_ .
Một điều cần lưu ý: Thay đổi thời gian hệ thống ảnh hưởng đến time.time()
chứ không phải time.clock()
.
Tôi cần phải kiểm soát một số thực thi kiểm tra tự động. Nếu một bước của trường hợp thử nghiệm mất hơn một khoảng thời gian nhất định, thì TC đó đã bị hủy bỏ để tiếp tục với bước tiếp theo.
Nhưng đôi khi một bước cần thiết để thay đổi thời gian hệ thống (để kiểm tra mô-đun lập lịch của ứng dụng đang thử nghiệm), vì vậy sau khi cài đặt thời gian hệ thống vài giờ trong tương lai, thời gian chờ TC hết hạn và trường hợp thử nghiệm bị hủy bỏ. Tôi đã phải chuyển từ time.time()
sang time.clock()
để xử lý việc này đúng cách.
clock()
-> số dấu phẩy động
Trả lại thời gian CPU hoặc thời gian thực kể từ khi bắt đầu quá trình hoặc kể từ lần gọi đầu tiên tới clock()
. Điều này có độ chính xác như hồ sơ hệ thống.
time()
-> số dấu phẩy động
Trả lại thời gian hiện tại tính bằng giây kể từ Kỷ nguyên. Phân số của một giây có thể có mặt nếu đồng hồ hệ thống cung cấp cho họ.
Thông thường time()
chính xác hơn, bởi vì các hệ điều hành không lưu trữ thời gian chạy quy trình với độ chính xác mà chúng lưu trữ thời gian hệ thống (tức là thời gian thực tế)
Phụ thuộc vào những gì bạn quan tâm. Nếu bạn có nghĩa là TƯỜNG THỜI GIAN (như trong, thời gian trên đồng hồ trên tường của bạn), time.clock () không cung cấp độ chính xác vì nó có thể quản lý thời gian của CPU.
Đối với riêng tôi practice. time()
có độ chính xác tốt hơn clock()
trên Linux. clock()
chỉ có độ chính xác dưới 10 ms. Trong khi time()
cung cấp độ chính xác hoàn hảo. Thử nghiệm của tôi là trên CentOS 6.4 python 2.6
using time():
1 requests, response time: 14.1749382019 ms
2 requests, response time: 8.01301002502 ms
3 requests, response time: 8.01491737366 ms
4 requests, response time: 8.41021537781 ms
5 requests, response time: 8.38804244995 ms
using clock():
1 requests, response time: 10.0 ms
2 requests, response time: 0.0 ms
3 requests, response time: 0.0 ms
4 requests, response time: 10.0 ms
5 requests, response time: 0.0 ms
6 requests, response time: 0.0 ms
7 requests, response time: 0.0 ms
8 requests, response time: 0.0 ms
Sự khác biệt là rất cụ thể nền tảng.
clock () rất khác nhau trên Windows, ví dụ như trên Linux.
Đối với loại ví dụ bạn mô tả, có thể bạn muốn mô-đun "timeit" thay thế.
Trên Unix time.clock () đo lượng thời gian CPU đã được sử dụng bởi quy trình hiện tại, do đó, sẽ không tốt khi đo thời gian đã trôi qua từ một thời điểm nào đó trong quá khứ. Trên Windows, nó sẽ đo giây đồng hồ treo tường trôi qua kể từ lần gọi đầu tiên đến chức năng. Trên một trong hai thời gian hệ thống.time () sẽ trả về giây trôi qua kể từ Kỷ nguyên.
Nếu bạn đang viết mã chỉ dành cho Windows, thì nó sẽ hoạt động (mặc dù bạn sẽ sử dụng hai mã khác nhau - không cần phép trừ cho time.clock ()). Nếu điều này sẽ chạy trên một hệ thống Unix hoặc bạn muốn mã được đảm bảo là có thể mang theo được, bạn sẽ muốn sử dụng time.time ().
Câu trả lời ngắn: sử dụng time.clock () để định thời gian trong Python.
Trên các hệ thống * nix, clock () trả về thời gian của bộ xử lý dưới dạng số dấu phẩy động, được biểu thị bằng giây. Trên Windows, nó trả về số giây đã trôi qua kể từ lần gọi đầu tiên đến chức năng này, dưới dạng số dấu phẩy động.
time () trả về số giây kể từ Epoch, trong UTC, dưới dạng số dấu phẩy động. Không có gì đảm bảo rằng bạn sẽ có được độ chính xác tốt hơn là 1 giây (mặc dù thời gian () trả về số dấu phẩy động). Cũng lưu ý rằng nếu đồng hồ hệ thống đã được đặt lại giữa hai lệnh gọi hàm này, lệnh gọi hàm thứ hai sẽ trả về giá trị thấp hơn.
Tôi sử dụng mã này để so sánh 2 phương thức. HĐH của tôi là windows 8, lõi xử lý i5, RAM 4GB
import time
def t_time():
start=time.time()
time.sleep(0.1)
return (time.time()-start)
def t_clock():
start=time.clock()
time.sleep(0.1)
return (time.clock()-start)
counter_time=0
counter_clock=0
for i in range(1,100):
counter_time += t_time()
for i in range(1,100):
counter_clock += t_clock()
print "time() =",counter_time/100
print "clock() =",counter_clock/100
đầu ra:
thời gian () = 0,0993799996376
đồng hồ () = 0,0993572257367
Theo sự hiểu biết tốt nhất của tôi, time.clock () có độ chính xác như hệ thống của bạn sẽ cho phép.
Câu trả lời đúng: Cả hai đều có cùng độ dài của một phân số.
Nhưng cái nào nhanh hơn nếu subject
là time
?
Một trường hợp thử nghiệm nhỏ:
import timeit
import time
clock_list = []
time_list = []
test1 = """
def test(v=time.clock()):
s = time.clock() - v
"""
test2 = """
def test(v=time.time()):
s = time.time() - v
"""
def test_it(Range) :
for i in range(Range) :
clk = timeit.timeit(test1, number=10000)
clock_list.append(clk)
tml = timeit.timeit(test2, number=10000)
time_list.append(tml)
test_it(100)
print "Clock Min: %f Max: %f Average: %f" %(min(clock_list), max(clock_list), sum(clock_list)/float(len(clock_list)))
print "Time Min: %f Max: %f Average: %f" %(min(time_list), max(time_list), sum(time_list)/float(len(time_list)))
Tôi không làm việc tại một phòng thí nghiệm Thụy Sĩ nhưng tôi đã thử nghiệm ..
Dựa trên câu hỏi này: time.clock()
tốt hơn time.time()
Chỉnh sửa: time.clock()
là bộ đếm nội bộ nên không thể sử dụng bên ngoài, có giới hạn max 32BIT FLOAT
, không thể tiếp tục đếm nếu không lưu trữ giá trị đầu tiên/cuối cùng. Không thể hợp nhất một bộ đếm khác ...