用于python的lz4frame库(通过c绑定)

py-lz4framed_ph4的Python项目详细描述


概述

这是一个用于python的LZ4帧压缩库 v3.2+(和2.7+),绑定到yann collet的LZ4 C implementation

安装/打包

# To get from PyPI
pip3 install py-lz4framed_ph4

# To only build extension modules inline (e.g. in repository)
python3 setup.py build_ext -i

# To build & install globally
python3 setup.py install

# To install locally with pip
pip install --upgrade --find-links=. .

注释

改进

这个叉子有几个改进,我需要为我的其他项目。

  • 流式解压缩继续(重新连接时)
  • 流式解压缩状态克隆-检查点
  • 流式解压缩封送处理-故障恢复,检查点设置

更多关于改进的信息

场景改进地址是下载 LZ4动态数据流(数百GB)。如果下载流是 中断了原来的减压器无法恢复 在停止的地方减压。

主要动机是从上述干扰中恢复过来。 decompressor对象现在支持更改 从中读取。如果输入套接字流下降,我们可以重新连接 从停止的位置继续。更多测试 test_decompressor_fp_continuation

状态克隆

如果处理逻辑更复杂,可以使用 clone_decompression_context以克隆解压缩程序上下文(整个 解压状态)并在出现故障时还原到此检查点。 更多测试test_decompressor_fp_clone

州编组

为了从程序崩溃中恢复,您可以封送/ 将解压缩程序上下文序列化为(字节)字符串,该字符串可以是 稍后解封/反序列化并从这一点继续。 封送处理状态可以存储在文件中。更多测试 test_decompressor_fp_marshalling

随机存取档案

情况:800 GB LZ4加密文件。你想随机访问文件所以 它可以从不同的偏移量进行映射/缩小或并行处理。

封送处理的解压缩程序状态只占用所需的内存量。 如果在块边界上执行状态转储(即 上一个调用的大小提示是由输入流提供的)。 在最佳情况下,marhsalled大小只有184b,66kb英寸 更糟糕的情况-当LZ4文件使用链接模式时。

无论如何,当状态封送处理返回这个小状态时,应用程序 可以构建一个元文件,映射:在输入流中的位置->; 解压器上下文。有了这个元文件,一个新的解压器可以跳到 特定的检查站。

用法

单功能操作:

importlz4framedcompressed=lz4framed.compress(b'binary data')uncompressed=lz4framed.decompress(compressed)

迭代压缩(文件或bytesio实例):

withopen('myFile','wb')asf:# Context automatically finalises frame on completion, unless an exception occurswithCompressor(f)asc:try:while(...):c.update(moreData)exceptLz4FramedNoDataError:pass

从类似文件的对象解压缩:

withopen('myFile','rb')asf:try:forchunkinDecompressor(f):decoded.append(chunk)exceptLz4FramedNoDataError:# Compress frame data incomplete - error case...

另请参见lz4framed/__main__.py 示例用法。

文档

importlz4framedprint(lz4framed.__version__,lz4framed.LZ4_VERSION,lz4framed.LZ4F_VERSION)help(lz4framed)

命令行实用程序

python3 -mlz4framed
USAGE: lz4framed (compress|decompress)(INFILE|-)[OUTFILE](De)compresses an lz4 frame. Input is read from INFILE unless set to '-', in
which case stdin is used. If OUTFILE is not specified, output goes to stdout.

测试

静态

此库已使用 flake8pylint,使用修改的配置-请参阅 pylint.rcflake8.cfg

单位

python3 -m unittest discover -v .

为什么?

唯一一个现有的LZ4帧互操作实现,我知道 写作时 (lz4tools)具有以下特性 限制:

  • 不完整的实现,例如引用和内存泄漏 失败时
  • 缺少单元测试
  • 非线程安全
  • 在低水平(de)压缩操作期间不释放gil
  • 没有满足外部项目的要求

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
试图读取字段“java”。lang.反对安卓。util。一对首先   gradle对java的影响。属性作为任务的输入?   java我的return语句不起作用。我做错了什么?   java通用同步代码块[无对象锁定]   macos Java小程序游戏不能在Mac上运行,即使它可以在PC上运行   java Firebase GeoFire设置位置未在服务中工作   java排序字符串对象   java通过JLabel上传背景图像(jpg)后,如何将图像缩放到它所在的面板上?   java无法连接到jsp中的数据库   java如何在整个ant taskdef操作的执行过程中拥有一个singleton类实例   java如何在按键事件中检查JTtextField中的字符串数字验证器   如何最好地输出大型单行XML文件(使用Java/Eclipse)?   内存不足,Java运行时环境无法在Java应用程序中继续运行   java Hibernate连接错误:组织上的NullPointerException。冬眠hql。阿斯特。HqlSqlWalker。createFromJoinElement   linux将参数从shell脚本传递到java类   java对于接受多个参数的setter是否有类似于@JsonCreator的注释?   java在链表中添加节点