2011-01-11 4 views
3

Я использую следующий код Python для вычисления времени User + Sys.OverflowError: нормализованные дни слишком велики для установки в C int

t = os.times() 
usersystime = t[0] + t[1] 
usersystime = datetime.timedelta(seconds=usersystime) 

Однако на m.4xlarge например Amazon EC2, я получаю следующее сообщение об ошибке иногда:

OverflowError: normalized days too large to fit in a C int 

Я использовал этот код Python в течение года без проблем. Теперь, по этому типу экземпляра Amazon EC2 (которого я никогда не использовал раньше), я получаю эту ошибку.

Как его решить?

+1

Какая версия Python? – milkypostman

+0

«пользовательское время» может быть преступником. Можете ли вы дать код, используемый для расчета этого значения? – marcog

+0

Не имеет смысла ... Как насчет упаковки этого кода в 'try: ... кроме OverflowError: print usersystime, os.times()'? – TryPyPy

ответ

1

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

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

EDIT:

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

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

+0

У меня была такая же проблема на хосте linux, работающем на azure – akiva

Смежные вопросы