一千萬個為什麽

搜索

如何在python中獲得單調時間?

我想記錄在真實的墻上時間需要多長時間。目前我正在這樣做:

startTime = time.time()
someSQLOrSomething()
print "That took %.3f seconds" % (time.time() - startTime)

但是,如果在SQL查詢(或其它任何東西)正在運行時調整時間,那將失敗(產生不正確的結果)。

我不想只以它為基準。我想將它登錄到實時應用程序中,以便查看現場系統的趨勢。

我想要的東西像clock_gettime(CLOCK_MONOTONIC,...),但在Python中。最好不用編寫一個調用clock_gettime()的C模塊。

最佳答案

該功能非常簡單,您可以使用ctypes來訪問它:

#!/usr/bin/env python

__all__ = ["monotonic_time"]

import ctypes, os

CLOCK_MONOTONIC_RAW = 4 # see 

class timespec(ctypes.Structure):
    _fields_ = [
        ('tv_sec', ctypes.c_long),
        ('tv_nsec', ctypes.c_long)
    ]

librt = ctypes.CDLL('librt.so.1', use_errno=True)
clock_gettime = librt.clock_gettime
clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)]

def monotonic_time():
    t = timespec()
    if clock_gettime(CLOCK_MONOTONIC_RAW , ctypes.pointer(t)) != 0:
        errno_ = ctypes.get_errno()
        raise OSError(errno_, os.strerror(errno_))
    return t.tv_sec + t.tv_nsec * 1e-9

if __name__ == "__main__":
    print monotonic_time()

轉載註明原文: 如何在python中獲得單調時間?