Files
2026-07-13 13:17:40 +08:00

35 lines
1010 B
Python

import io
import logging
from typing import TYPE_CHECKING, Any
if TYPE_CHECKING:
pass
import ray._private.utils
import ray.cloudpickle as pickle
import ray.exceptions
from ray._private import ray_constants
from ray.util import inspect_serializability
logger = logging.getLogger(__name__)
ALLOW_OUT_OF_BAND_OBJECT_REF_SERIALIZATION = ray_constants.env_bool(
"RAY_allow_out_of_band_object_ref_serialization", True
)
def pickle_dumps(obj: Any, error_msg: str):
"""Wrap cloudpickle.dumps to provide better error message
when the object is not serializable.
"""
try:
return pickle.dumps(obj)
except (TypeError, ray.exceptions.OufOfBandObjectRefSerializationException) as e:
sio = io.StringIO()
inspect_serializability(obj, print_file=sio)
msg = f"{error_msg}:\n{sio.getvalue()}"
if isinstance(e, TypeError):
raise TypeError(msg) from e
else:
raise ray.exceptions.OufOfBandObjectRefSerializationException(msg)