OverflowError: нормализованные дни слишком велики, чтобы поместиться в C int - PullRequest
4 голосов
/ 12 января 2011

Я использую следующий код 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 (который я никогда раньше не использовал), я получаю эту ошибку.

Как мне это решить?

1 Ответ

1 голос
/ 17 января 2011

Я обнаружил, что некоторые встроенные функции Python, такие как range или xrange, не поддерживают большие целые числа, возможно потому, что они реализованы в C как оптимизация. Взгляните на этот вопрос для примера.

Это может быть так для вашего кода. t[0] + t[1] соответствует целому числу? Если нет, вам придется либо найти способ обойти это (нормализовать t[0] + t[1]? Зависит от того, что вы хотите сделать, а ваш фрагмент не дает ясного представления), либо реализовать свой собственный timedelta.

EDIT:

Взглянув на документацию Python и запустив ваш код на моем рабочем столе (WinXP 32bit / Python2.7), я не вижу причин для целочисленного переполнения. Тем не менее, вы упоминаете, что эта проблема возникает иногда , так что это может быть times () экземпляра Amazon, возвращающей некоторые интересные значения (yay virtualization;)).

Сначала попробуйте выполнить несколько тестов, чтобы точно определить , в каких диапазонах t[0] и t[1] происходит исключение. Если у них действительно есть несколько необычно высоких значений (возможно, потому что экземпляр был приостановлен, а затем возобновлен, не знаю с такой маленькой детализацией), ваш код проверяет это.

...