我使用以下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实例(我以前从未使用过)上,我收到了这个错误。
我该如何解决?
答案 0 :(得分:1)
我发现Python的一些内置函数(如range
或xrange
)不支持更大的整数,可能是因为它们在C中实现为优化。请查看this question示例。
您的代码可能就是这种情况。 t[0] + t[1]
是否适合整数?如果没有,您将不得不找到解决方法(规范化t[0] + t[1]
?取决于您想要做什么,而您的代码段不清楚)或实施您自己的timedelta
。
编辑:
看看Python的文档并在我的桌面上运行代码(WinXP 32bit / Python2.7),我认为没有理由出现整数溢出。但是,你提到偶尔发生这个问题,所以它可能是亚马逊实例的 times()返回一些时髦的值(yay virtualization;))。
首先,尝试进行一些测试以确定完全异常发生的t[0]
和t[1]
范围。如果他们确实有一些非常高的值(可能因为实例暂停然后恢复,不知道有这么少的细节),你的代码测试反对。