2012-06-18 4 views
1

После запуска кода из моего previous question, я получаю результирующий набор из моего подпроцесса, который выглядит следующим образом:TypeError: не солить время объекты

[[(<PyTime:6/10/2012 3:24:17 AM>, 1593.5, 413.0, 19.600000381469727, 430.0, 16.0, 47.0, 42.70000076293945, 15.600000381469727, 69.5), 
(<PyTime:6/10/2012 3:24:18 AM>, 1658.0, 412.0, 19.600000381469727, 429.0, 7.0, 34.400001525878906, 30.899999618530273, 15.699999809265137, 69.5), 
(<PyTime:6/10/2012 3:24:19 AM>, 1685.0, 406.0, 19.600000381469727, 425.0, 18.0, 28.700000762939453, 26.399999618530273, 15.699999809265137, 69.5)]] 

При попытке отправить это от моего подпроцесса к моему родителю процесс, я делаю это, где cu соответствует приведенному выше.

conn.send(pickle.dumps(cu)) 

Это приводит к следующей ошибке: TypeError: can't pickle time objects

Что работа вокруг, чтобы отправить приведенный выше список обратно в родительский процесс?

ответ

3

Как и другие ответы, PyTime объекты не «разборчивы». Я бы предложил преобразовать их в обычные datetime объекты, которые могут быть разведены:

from datetime import datetime 

list_of_pytimes = [ ... ] 
list_of_datetimes = [datetime.fromtimestamp(int(pytime)) for pytime in list_of_pytimes] 
# Now this will work 
pickle.dumps(list_of_datetimes) 
0

Пробовать обезвреживание обезьян PyTime класс с __getstate__ и __setstate__ (documentation). Если это не сработает, вам придется преобразовать в макетируемый тип, например. datetime.time.

1

Те объекты PyTime не похожи на объекты datetime из стандартной библиотеки Python. Поскольку обычные объекты datetime кажутся рассорами без проблем, я бы рекомендовал их преобразовать. Я не знаю, какой драйвер базы данных вы используете, но вы можете настроить его для использования стандартных объектов datetime.

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

  • Нет связанных вопросов^_^