msgpack/msgpack-python là một trong những repo phía máy chủ mà TopGit theo dõi, hiện có 2.1k sao, viết chủ yếu bằng Python. MessagePack serializer implementation for Python msgpack.org[Python]
Tóm tắt dựng từ metadata GitHub của chính dự án — chưa có bài review TopGit. Trang sẽ tự động cập nhật khi bài review đầy đủ được xuất bản.
VÌ SAO CHƯA CÓ REVIEW
TopGit viết bài đầy đủ cho repo có nhiều sao nhất và được yêu cầu nhiều nhất. Trang này là snapshot trong thời gian chờ — xem README gốc ở tab READ ME.
MessagePack is an efficient binary serialization format.
It lets you exchange data among multiple languages like JSON.
But it's faster and smaller.
This package provides CPython bindings for reading and writing MessagePack data.
Install
$ pip install msgpack
Pure Python implementation
The extension module in msgpack (msgpack._cmsgpack) does not support PyPy.
But msgpack provides a pure Python implementation (msgpack.fallback) for PyPy.
Windows
If you can't use a binary distribution, you need to install Visual Studio
or the Windows SDK on Windows.
Without the extension, the pure Python implementation on CPython runs slowly.
How to use
One-shot pack & unpack
Use packb for packing and unpackb for unpacking.
msgpack provides dumps and loads as aliases for compatibility with
json and pickle.
pack and dump pack to a file-like object.
unpack and load unpack from a file-like object.
Unpacker is a "streaming unpacker". It unpacks multiple objects from one
stream (or from bytes provided through its feed method).
import msgpack
from io import BytesIO
buf = BytesIO()
for i in range(100):
buf.write(msgpack.packb(i))
buf.seek(0)
unpacker = msgpack.Unpacker(buf)
for unpacked in unpacker:
print(unpacked)
[!IMPORTANT]
If Unpacker.unpack() stops with an exception other than OutOfData, that Unpacker cannot be reused.
Create a new Unpacker when reading another stream.
Packing/unpacking of custom data types
It is also possible to pack/unpack custom data types. Here is an example for
datetime.datetime.
As an alternative to iteration, Unpacker objects provide unpack,
skip, read_array_header, and read_map_header methods. The former two
read an entire message from the stream, respectively deserializing and returning
the result, or ignoring it. The latter two methods return the number of elements
in the upcoming container, so that each element in an array, or key-value pair
in a map, can be unpacked or skipped individually.
Notes
String and binary types in the old MessagePack spec
Early versions of msgpack didn't distinguish string and binary types.
The type for representing both string and binary types was named raw.
You can pack into and unpack from this old spec using use_bin_type=False
and raw=True options.
You can use it with default and ext_hook. See below.
Security
When unpacking data received from an unreliable source, msgpack provides
two security options.
max_buffer_size (default: 100*1024*1024) limits the internal buffer size.
It is also used to limit preallocated list sizes.
strict_map_key (default: True) limits the type of map keys to bytes and str.
While the MessagePack spec doesn't limit map key types,
there is a risk of a hash DoS.
If you need to support other types for map keys, use strict_map_key=False.
Performance tips
CPython's GC starts when the number of allocated objects grows.
This means unpacking may trigger unnecessary GC.
You can use gc.disable() when unpacking a large message.
A list is the default sequence type in Python.
However, a tuple is lighter than a list.
You can use use_list=False while unpacking when performance is important.
Major breaking changes in the history
msgpack 0.5
The package name on PyPI was changed from msgpack-python to msgpack in 0.5.
When upgrading from msgpack-0.4 or earlier, do pip uninstall msgpack-python before
pip install -U msgpack.
msgpack 1.0
Python 2 support
The extension module no longer supports Python 2.
The pure Python implementation (msgpack.fallback) is used for Python 2.
msgpack 1.0.6 drops official support of Python 2.7, as pip and
GitHub Action "setup-python" no longer supports Python 2.7.
Packer
Packer uses use_bin_type=True by default.
Bytes are encoded in the bin type in MessagePack.
The encoding option is removed. UTF-8 is always used.
Unpacker
Unpacker uses raw=False by default. It assumes str values are valid UTF-8 strings
and decodes them to Python str (Unicode) objects.
encoding option is removed. You can use raw=True to support old format (e.g. unpack into bytes, not str).
The default value of max_buffer_size is changed from 0 to 100 MiB to avoid DoS attacks.
You need to pass max_buffer_size=0 if you have large but safe data.
The default value of strict_map_key is changed to True to avoid hash DoS.
You need to pass strict_map_key=False if you have data that contain map keys
whose type is neither bytes nor str.
msgpack/msgpack-python thuộc nhóm Backend trên TopGit, cùng 2 topic GitHub. Trang Trending và Topics liệt kê các repo cùng số sao và cùng ngôn ngữ để so sánh.
Đọc thêm về msgpack/msgpack-python ở đâu?
Trang TopGit này là một snapshot — tab "Readme" hiển thị nguyên văn README của repo (đã bỏ link, giữ ảnh). Repo GitHub ở github.com/msgpack/msgpack-python là nguồn chính thức.
msgpack/msgpack-python có phải mã nguồn mở không?
TopGit chưa ghi nhận license cho msgpack/msgpack-python. Phần lớn repo public trên GitHub là mã nguồn mở, nhưng điều khoản khác nhau từng repo — mở file LICENSE để xác nhận.
msgpack/msgpack-python là gì?
msgpack/msgpack-python (msgpack/msgpack-python) là dự án Python trên GitHub. Theo mô tả gốc: MessagePack serializer implementation for Python msgpack.org[Python]
msgpack/msgpack-python so với các dự án Backend khác thế nào?
msgpack/msgpack-python được TopGit xếp vào nhóm Backend, với 2.1k sao GitHub và viết bằng Python. Xem trang chủ đề Backend trên TopGit để so sánh với các dự án tương tự theo số sao và mức độ hoạt động.
Vì sao msgpack/msgpack-python được xếp vào nhóm Backend?
TopGit xếp msgpack/msgpack-python vào nhóm Backend dựa trên GitHub topics và mô tả của repo (gắn thẻ: "msgpack", "python"). Việc phân loại dựa trên metadata thật của repo, không phải đoán theo cảm tính biên tập.
Đọc đầy đủ README ở tab phía trên.
Muốn nghe thêm một ý kiến về msgpack-python?
Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về msgpack-python.