[英]Python Elapsed Time as Days, Hours, Minutes, Seconds
我想以天、小时、分钟和秒为单位测量一段代码的执行时间。 这是我到目前为止所拥有的:
import time
start_time = time.time()
# some code
elapsed = time.strftime("%H:%M:%S", time.gmtime(time.time() - start_time))
print(f"Took: {elapsed}")
问题是,如果我测量的代码花费的时间超过 24 小时,则显示的时间会溢出并再次从零开始。 我想要这样的东西:
# Example: 12 hours and 34 minutes should be printed as
> Took: 12:34:00
# Example: 26 hours and 3 minutes should be printed as
> Took: 1:02:03:00
time.gmtime(time.time() - start_time)
的结果并不是你想象的那样。 它不是一个持续时间,而是一个时间点。 让我解释。
time.time()
的结果是调用时自 1970 年 1 月 1 日 00:00:00 (UTC) 以来的秒数。 因此,语句time.time() - start_time
将产生两次调用之间的秒数。 到目前为止,一切都很好。 但是, time.gmtime
function 将此持续时间解释为自 1970 年 1 月 1 日 00:00:00 (UTC) 以来的秒数,并相应地格式化时间。 您所看到的是日期 1970 年 1 月 1 日 12:34:00 (UTC) 的时间部分。
我建议您使用datetime.timedelta
object 并使用它来格式化,或者按照其他人的建议,output 以秒或毫秒为单位的持续时间。
如果你想自己格式化这个数字,你可以使用这样的东西:
def format_duration(duration):
mapping = [
('s', 60),
('m', 60),
('h', 24),
]
duration = int(duration)
result = []
for symbol, max_amount in mapping:
amount = duration % max_amount
result.append(f'{amount}{symbol}')
duration //= max_amount
if duration == 0:
break
if duration:
result.append(f'{duration}d')
return ' '.join(reversed(result))
您可以使用日期时间:
from datetime import datetime as dt
start = dt.fromtimestamp(1588432670)
end = dt.now()
elapsed=end-start
print("Took: %02d:%02d:%02d:%02d" % (elapsed.days, elapsed.seconds // 3600, elapsed.seconds // 60 % 60, elapsed.seconds % 60))
Output:
Took: 33:00:21:49
你应该试试这个:
import time
start_time = time.time()
...
elapsed_time = time.time() - start_time
days = 0
if elapsed_time >= 86400:
days = int(elapsed_time / 86400)
elapsed = time.strftime("%H:%M:%S", time.gmtime(time.time() - start_time))
if days == 0:
print(f"Took: {elapsed}")
else:
print(f"Took: {days}:{eplased}")
尝试使用timeit:
import timeit
timeit.timeit(<callable function>, number = 100)
这里 timeit 将调用callable function
number
并为您提供平均运行时间。
时间类型只能包括小时和更少的单位。 您应该使用 datetime 而不是 time,如下所示:
from datetime import datetime
start_time = datetime.now()
# some code
elapsed = datetime.now() - start_time)
print(f"Took: {elapsed}")
from datetime import datetime
d1 = datetime(2013,9,1,5,5,4)
d2 = datetime(2013,1,13,3,2,1)
result1 = d1-d2
print ('{} between {} and {}'.format(result1, d1, d2))
这将产生以下 output:
231 days, 2:03:03 between 2013-09-01 05:05:04 and 2013-01-13 03:02:01
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.