我正在使用以下 Python 代码来计算 User+Sys 时间。
t = os.times()
usersystime = t[0] + t[1]
usersystime = datetime.timedelta(seconds=usersystime)
但是,在 Amazon EC2 m.4xlarge 实例上,我偶尔会遇到以下错误:
OverflowError: normalized days too large to fit in a C int
我已经使用这段 Python 代码一年多了,没有任何问题。现在,在这一种类型的 Amazon EC2 实例(我以前从未使用过)上,我收到了这个错误。
如何解决?
我发现一些 Python 的内置函数,例如 range
或 xrange
不支持更大的整数,可能是因为它们是在C 作为优化。看看this question举个例子。
您的代码可能就是这种情况。 t[0] + t[1]
是否适合整数?如果没有,您将不得不找到解决方法(规范化 t[0] + t[1]
?取决于您想要做什么,您的代码片段并不清楚) 或实现您自己的 timedelta
。
编辑:
查看 Python 的文档并在我的桌面(WinXP 32 位/Python2.7)上运行您的代码,我看不出整数溢出的原因。但是,您提到此问题偶尔会发生,因此可能是 Amazon 实例的 times() 返回了一些古怪的值(是的虚拟化 ;))。
首先,尝试进行一些测试以确定确切异常发生在t[0]
和t[1]
的范围内。如果它们确实有一些异常高的值(可能是因为实例暂停然后恢复,不知道这么少的细节),您的代码会针对它进行测试。
我是一名优秀的程序员,十分优秀!