Pandas msgpack vs pickle

Se supone que msgpack en Pandas es un reemplazo para pickle .

Por los documentos de Pandas en msgpack :

Este es un formato binario portátil ligero, similar a JSON binario, que es altamente eficiente en espacio, y proporciona un buen rendimiento tanto en la escritura (serialización) como en la lectura (deserialización).

Sin embargo, me parece que su rendimiento no parece astackrse contra los encurtidos.

 df = pd.DataFrame(np.random.randn(10000, 100)) >>> %timeit df.to_pickle('test.p') 10 loops, best of 3: 22.4 ms per loop >>> %timeit df.to_msgpack('test.msg') 10 loops, best of 3: 36.4 ms per loop >>> %timeit pd.read_pickle('test.p') 100 loops, best of 3: 10.5 ms per loop >>> %timeit pd.read_msgpack('test.msg') 10 loops, best of 3: 24.6 ms per loop 

Pregunta: Aparte de los posibles problemas de seguridad con pickle, ¿cuáles son los beneficios de msgpack sobre pickle? ¿Pickle sigue siendo el método preferido para serializar datos, o existen actualmente mejores alternativas?

Pickle es mejor para lo siguiente:

  1. Datos numéricos o cualquier cosa que utilice el protocolo de búfer (arrays de números) (aunque solo si usa un protocol= algo reciente protocol= )
  2. Objetos específicos de Python como clases, funciones, etc. (aunque aquí deberías ver cloudpickle )

MsgPack es mejor para lo siguiente:

  1. Interoperación entre idiomas. Es una alternativa a JSON con algunas mejoras.
  2. Rendimiento en datos de texto y objetos de Python. Es un factor decente más rápido que Pickle en esto, bajo cualquier configuración.

Como @Jeff señaló anteriormente, este blogpost puede ser de interés