Python 我可以让pickle.dump公开类似文件的对象吗?
我想把我的东西用压缩过的泡菜腌制一下。因为这些对象很大,所以我想使用流式处理——即pickle.dump,而不是pickle.dumps 不幸的是,snappy和pickle API似乎并不特别兼容:Python 我可以让pickle.dump公开类似文件的对象吗?,python,pickle,Python,Pickle,我想把我的东西用压缩过的泡菜腌制一下。因为这些对象很大,所以我想使用流式处理——即pickle.dump,而不是pickle.dumps 不幸的是,snappy和pickle API似乎并不特别兼容: snappy.stream_compress(src, dst, blocksize=65536) pickle.dump(obj, file, protocol=None) 有没有想过我需要什么样的魔法来实现像snappy.stream\u压缩(pickle.dump\u magic(obj,
snappy.stream_compress(src, dst, blocksize=65536)
pickle.dump(obj, file, protocol=None)
有没有想过我需要什么样的魔法来实现像
snappy.stream\u压缩(pickle.dump\u magic(obj,dst)
这样的东西,才能像今天的pickle.dump(obj,dst)
一样工作?最简单的方法是pickle.dump
到一个文件,然后snappy.stream\u压缩文件
def snappy_pickle_dump(obj, f):
tmpf = ...
with open(tmpf, 'wb') as F:
pickle.dump(obj, F)
with open(f, 'wb') as OUT:
with open(tmpf, 'rb') as IN:
snappy.stream_compress(IN, OUT)
os.remove(tmpf)
如果必须避免存储整个未压缩的转储,则可以使用一个线程pickle.dump
将对象放入StringIO
对象中,另一个线程snappy.stream\u压缩它。最简单的方法是pickle.dump
到文件中,然后snappy.stream\u压缩文件
def snappy_pickle_dump(obj, f):
tmpf = ...
with open(tmpf, 'wb') as F:
pickle.dump(obj, F)
with open(f, 'wb') as OUT:
with open(tmpf, 'rb') as IN:
snappy.stream_compress(IN, OUT)
os.remove(tmpf)
如果您必须避免存储整个未压缩的转储文件,您可以使用一个线程pickle.dump
将对象放入StringIO
对象中,另一个线程snapy.stream\u压缩它。我同意这可能是最简单的,但如果可能的话,最好避免额外的读/写过程我同意这可能是最简单的,但如果可能的话,最好避免额外的读/写过程(可能是线程化,因为这部分应该主要是IO绑定的)。