Skip to main content

LZ4 bindings for Python

Project description

Overview

This package provides bindings for the lz4 compression library by Yann Collet.

Install

The package is hosted on PyPI:

$ pip install lz4
$ easy_install lz4

Usage

The library is pretty simple to use:

>>> import lz4
>>> compressed_data = lz4.dumps(data)
>>> data == lz4.loads(compressed_data)
True
>>>

Methods

The bindings provides some aliases too:

>>> import lz4
>>> lz4.LZ4_compress == lz4.compress == lz4.dumps
True
>>> lz4.LZ4_uncompress == lz4.uncompress == lz4.loads
True
>>>

Is it fast ?

Yes. Here are the results on my 2011 Macbook Pro i7:

Compression:
200000 calls - LZ4:
  Best: 2.918570 seconds
  Worst: 2.966427 seconds
200000 calls - Snappy:
  Best: 3.634658 seconds
  Worst: 3.670079 seconds
Decompression
200000 calls - LZ4:
  Best: 0.458944 seconds
  Worst: 0.483467 seconds
200000 calls - Snappy:
  Best: 0.714303 seconds
  Worst: 0.753677 seconds

With the following code:

>>> import uuid
>>> import timeit
>>> import lz4
>>> import snappy
>>> from timeit import Timer

>>> DATA = "".join([ str(uuid.uuid4()) for _ in xrange(200)])
>>> LZ4_DATA = lz4.compress(DATA)
>>> SNAPPY_DATA = snappy.compress(DATA)
>>> LOOPS = 200000

>>> print "Compression:"
>>> times = [Timer("lz4.compress(DATA)", "from __main__ import DATA; import lz4").timeit(number=LOOPS) for x in xrange(10)]
>>> print "%d calls - LZ4:" % LOOPS
>>> print "  Best: %f seconds" % min(times)
>>> print "  Worst: %f seconds" % max(times)
>>> times = [Timer("snappy.compress(DATA)", "from __main__ import DATA; import snappy").timeit(number=LOOPS) for x in xrange(10)]
>>> print "%d calls - Snappy:" % LOOPS
>>> print "  Best: %f seconds" % min(times)
>>> print "  Worst: %f seconds" % max(times)

>>> print "Decompression"
>>> times = [Timer("lz4.uncompress(LZ4_DATA)", "from __main__ import LZ4_DATA; import lz4").timeit(number=LOOPS) for x in xrange(10)]
>>> print "%d calls - LZ4:" % LOOPS
>>> print "  Best: %f seconds" % min(times)
>>> print "  Worst: %f seconds" % max(times)
>>> times = [Timer("snappy.uncompress(SNAPPY_DATA)", "from __main__ import SNAPPY_DATA; import snappy").timeit(number=LOOPS) for x in xrange(10)]
>>> print "%d calls - Snappy:" % LOOPS
>>> print "  Best: %f seconds" % min(times)
>>> print "  Worst: %f seconds" % max(times)

Important note

Because LZ4 doesn’t define a container format, the python bindings will insert the original data size as an integer at the start of the compressed payload, like most bindings do anyway (Java…)

Project details


Release history Release notifications | RSS feed

This version

0.2

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

lz4-0.2.tar.gz (8.5 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page