在Python中以纳秒获取mach_absolute_time/UpTime()

2 投票
1 回答
2260 浏览
提问于 2025-04-15 16:33

我需要在运行在Mac OS X 10.6上的Python程序中获取自启动以来经过的时间,单位是纳秒。

我在C代码中使用以下Carbon调用来获取这个时间:

AbsoluteTime uptimeAbs = AbsoluteToNanoseconds(UpTime());
uint64_t elapsedTime = ((uint64_t)uptimeAbs.hi << 32) + uptimeAbs.lo;

有没有办法通过Carbon或PyObjC模块在Python中调用这些函数?我试过:

from Carbon import *
UpTime()

但出现了“NameError: name 'UpTime' is not defined”的错误。

我该如何在OS X上通过Python获取这个值呢?

1 个回答

2

在这个回答的代码中,我发现了一个方法 -[NSProcessInfo systemUptime],这个方法从10.6版本开始可以使用。它会给我一个以小数秒为单位的时间,我可以把这个时间乘以其他值:

from Foundation import *
NSProcessInfo.processInfo().systemUptime() * 1e9

这个结果的精度可以达到纳秒级别,应该能很好地满足我的需求。

更新:下面这个方法也可以用,并且兼容10.5版本:

from Quartz.QuartzCore import *
CACurrentMediaTime() * 1e9

撰写回答