Joe*_*een 5 python pickle python-2.7
我有一个使用Queue对象列表的类.我需要挑选这个类,包括保存在队列对象中的信息.例如:
import Queue
import pickle
class QueueTest(object):
def __init__(self):
self.queueList = []
def addQueue(self):
q = Queue.Queue()
q.put('test')
self.queueList.append(q)
obj = QueueTest()
obj.addQueue()
with open('pickelTest.dat','w') as outf:
pickle.dump(obj,outf)
Run Code Online (Sandbox Code Playgroud)
返回错误
raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle lock objects
Run Code Online (Sandbox Code Playgroud)
是否有工作来挑选Queue对象?
我建议更换您的使用Queue.Queue与collections.deque.所述Queue类旨在用于线程之间的同步通信,所以作为常规数据结构一起使用时就会产生一些不必要的开销.collections.deque是一个更快的选择.(名称"deque"的发音为"deck",意思是"双端队列".)
该deque班确实有比不同的API Queue类型,但它应该是很容易它们之间的转换.使用deque.append代替Queue.put和deque.popleft代替q.get()(或appendleft和pop,如果你想去其他方向).而不是调用Queue.empty,只需使用deque实例作为布尔值(就像测试空列表一样).
deque 实例可以选择:
>>> import collections, pickle
>>> q = collections.deque(["test"])
>>> pickle.dumps(q)
b'\x80\x03ccollections\ndeque\nq\x00]q\x01X\x04\x00\x00\x00testq\x02a\x85q\x03Rq\x04.'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4589 次 |
| 最近记录: |