从previous question运行代码后,我从子进程中得到一个如下所示的结果集:
[[(<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
将上述列表发送回父进程有什么用?
答案 0 :(得分:3)
正如其他答案所说,PyTime
对象不是“pickleable”。我建议将它们转换为常规的datetime
对象,这些对象可以是pickle:
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)
答案 1 :(得分:1)
那些PyTime对象看起来不像Python标准库中的日期时间对象。由于正常的日期时间对象看起来没有问题,我建议转换它们。我不知道您正在使用什么数据库驱动程序,但您可以将其配置为使用标准日期时间对象。
答案 2 :(得分:0)
尝试使用PyTime
和__getstate__
__setstate__
(documentation)修补猴子datetime.time
课程。如果这不起作用,您将必须转换为pickleable类型,例如{{1}}。