[Zodb-checkins] CVS: StandaloneZODB/ZEO - TransactionBuffer.py:1.1.2.3
Jeremy Hylton
jeremy@zope.com
Fri, 4 Jan 2002 17:21:35 -0500
Update of /cvs-repository/StandaloneZODB/ZEO
In directory cvs.zope.org:/tmp/cvs-serv14021
Modified Files:
Tag: ZEO-ZRPC-Dev
TransactionBuffer.py
Log Message:
Use cPickle's fast Pickler() instead of marshal.
Remove try/except in next() and trust self.count instead.
=== StandaloneZODB/ZEO/TransactionBuffer.py 1.1.2.2 => 1.1.2.3 ===
import tempfile
-import marshal
+import cPickle
class TransactionBuffer:
+
def __init__(self):
self.file = tempfile.TemporaryFile()
self.count = 0
self.size = 0
+ # It's safe to use a fast pickler because the only objects
+ # stored are builtin types -- strings or None.
+ self.pickler = cPickle.Pickler(self.file, 1)
+ self.pickler.fast = 1
def store(self, oid, version, data):
"""Store oid, version, data for later retrieval"""
- marshal.dump((oid, version, data), self.file)
- self.count = self.count + 1
+ self.pickler.dump((oid, version, data))
+ self.count += 1
# Estimate per-record cache size
self.size = self.size + len(data) + (27 + 12)
if version:
self.size = self.size + len(version) + 4
def invalidate(self, oid, version):
- marshal.dump((oid, version, None), self.file)
- self.count = self.count + 1
+ self.pickler.dump((oid, version, None))
+ self.count += 1
def clear(self):
"""Mark the buffer as empty"""
@@ -46,16 +51,15 @@
"""Move the file pointer in advance of iteration"""
self.file.flush()
self.file.seek(0)
+ self.unpickler = cPickle.Unpickler(self.file)
def next(self):
"""Return next tuple of data or None if EOF"""
- if not self.count:
+ if self.count == 0:
+ del self.unpickler
return None
- try:
- oid_ver_data = marshal.load(self.file)
- except EOFError:
- return None
- self.count = self.count - 1
+ oid_ver_data = self.unpickler.load()
+ self.count -= 1
return oid_ver_data
def get_size(self):