1

运行上一个问题的代码后,我从子进程中得到一个结果集,如下所示:

[[(<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

将上述列表发送回父进程的解决方法是什么?

4

3 回答 3

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)
于 2012-06-18T15:45:39.150 回答
1

这些 PyTime 对象看起来不像 Python 标准库中的 datetime 对象。由于正常的日期时间对象似乎可以毫无问题地腌制,因此我建议对其进行转换。我不知道您使用的是什么数据库驱动程序,但您可以将其配置为使用标准日期时间对象。

于 2012-06-18T15:34:56.453 回答
0

尝试使用和(文档)进行猴子修补PyTime类。如果这不起作用,您将不得不转换为可腌制类型,例如.__getstate____setstate__datetime.time

于 2012-06-18T15:34:41.277 回答