在Linux系统中使用Python实现高精度时间
这是一个分成两部分的问题,第一部分比较简单。我想获取当前时间的高精度数字,这在perl中可以很容易地通过Time::HiRes模块实现。我在其他地方找到了答案,使用python中的time.time()。不过,当我这样做时,得到的结果只有两位有效数字,我在想是不是需要导入其他东西,或者在我的环境中设置什么。看看这个:
>>> import time
>>> print time.time()
1326459121.68
我的第二个问题和setitimer有关,文档上说它可以发送警报,时间可以用浮点数来指定。这正是我想要的。实际上,根据这个 - python定时器之谜,使用起来似乎很简单。但是当我完全复制那个例子时,却得到了这个:
[root@poker python]# ./signal.py
Traceback (most recent call last):
File "./signal.py", line 10, in ?
signal.setitimer(signal.ITIMER_REAL, 2, 2)
AttributeError: 'module' object has no attribute 'setitimer'
也许部分问题在于,作为一个新的python用户,我还没有完全掌握python,可能不太理解错误信息想告诉我的内容。它是在抱怨找不到signal.setitimer,还是我传递的属性有问题?我在想是不是无法解析signal.ITIMER_REAL,所以我试着用0来调用它,看看会发生什么,现在它告诉我:
[root@poker python]# ./signal.py
Traceback (most recent call last):
File "./signal.py", line 10, in ?
signal.setitimer(0, 2, 2)
AttributeError: 'module' object has no attribute 'setitimer'
所以我得相信是signal.setitimer本身出现了问题。
啊哈!我刚刚通过在一个更新版本的python的虚拟机上尝试这个问题找到了答案,结果一切正常。看起来setitimer在我的python版本中不可用,但我怎么能从错误信息中判断呢?难道不应该说这个模块没有这个方法吗?把缺失的方法称为属性真让人困惑。
也许这就是学习过程的一部分。无论如何,我想把这个第二个问题留在这里,以便其他人也能受益,但我仍然对为什么无法从time.time()获取高精度时间感到困惑,即使在这个更新版本的python中,它仍然只报告到百分之一秒。
1 个回答
time.time() 返回的数字比较多,但 repr 只保留了两位。
>>> import time >>> time.time() 1326460396.626451 >>> print time.time() 1326460422.68
你找不到 setitimer 的问题其实很简单,因为你把你的 Python 脚本命名为 'signal.py'。当你在脚本中使用 'import signal' 时,其实是导入了你自己的脚本,而不是信号模块。只需把文件名改成别的就可以了。