Source code for ray.util.serialization
import ray
import ray.cloudpickle as pickle
from ray.util.annotations import DeveloperAPI, PublicAPI
[docs]
@PublicAPI
def register_serializer(cls: type, *, serializer: callable, deserializer: callable):
"""Use the given serializer to serialize instances of type ``cls``,
and use the deserializer to deserialize the serialized object.
Args:
cls: A Python class/type.
serializer: A function that converts an instances of
type ``cls`` into a serializable object (e.g. python dict
of basic objects).
deserializer: A function that constructs the
instance of type ``cls`` from the serialized object.
This function itself must be serializable.
"""
context = ray._private.worker.global_worker.get_serialization_context()
context._register_cloudpickle_serializer(cls, serializer, deserializer)
[docs]
@PublicAPI
def deregister_serializer(cls: type):
"""Deregister the serializer associated with the type ``cls``.
There is no effect if the serializer is unavailable.
Args:
cls: A Python class/type.
"""
context = ray._private.worker.global_worker.get_serialization_context()
context._unregister_cloudpickle_reducer(cls)
@DeveloperAPI
class StandaloneSerializationContext:
# NOTE(simon): Used for registering custom serializers. We cannot directly
# use the SerializationContext because it requires Ray workers. Please
# make sure to keep the API consistent.
def _register_cloudpickle_reducer(self, cls, reducer):
pickle.CloudPickler.dispatch[cls] = reducer
def _unregister_cloudpickle_reducer(self, cls):
pickle.CloudPickler.dispatch.pop(cls, None)
def _register_cloudpickle_serializer(
self, cls, custom_serializer, custom_deserializer
):
def _CloudPicklerReducer(obj):
return custom_deserializer, (custom_serializer(obj),)
# construct a reducer
pickle.CloudPickler.dispatch[cls] = _CloudPicklerReducer