def serialize(self, value): """Serialize an object. Args: value: The value to serialize. """ if isinstance(value, bytes): # If the object is a byte array, skip serializing it and # use a special metadata to indicate it's raw binary. So # that this object can also be read by Java. return RawSerializedObject(value) else: # Only RayTaskError is possible to be serialized here. We don't # need to deal with other exception types here. if isinstance(value, RayTaskError): metadata = str(ErrorType.Value( "TASK_EXECUTION_EXCEPTION")).encode("ascii") else: metadata = ray_constants.PICKLE5_BUFFER_METADATA assert self.worker.use_pickle assert ray.cloudpickle.FAST_CLOUDPICKLE_USED writer = Pickle5Writer() # TODO(swang): Check that contained_object_ids is empty. inband = pickle.dumps(value, protocol=5, buffer_callback=writer.buffer_callback) return Pickle5SerializedObject( metadata, inband, writer, self.get_and_clear_contained_object_ids())
def _serialize_to_pickle5(self, metadata, value): writer = Pickle5Writer() # TODO(swang): Check that contained_object_refs is empty. try: self.set_in_band_serialization() inband = pickle.dumps( value, protocol=5, buffer_callback=writer.buffer_callback) except Exception as e: self.get_and_clear_contained_object_refs() raise e finally: self.set_out_of_band_serialization() return Pickle5SerializedObject( metadata, inband, writer, self.get_and_clear_contained_object_refs())
def serialize(self, value): """Serialize an object. Args: value: The value to serialize. """ if isinstance(value, bytes): # If the object is a byte array, skip serializing it and # use a special metadata to indicate it's raw binary. So # that this object can also be read by Java. return RawSerializedObject(value) assert self.worker.use_pickle assert ray.cloudpickle.FAST_CLOUDPICKLE_USED writer = Pickle5Writer() inband = pickle.dumps(value, protocol=5, buffer_callback=writer.buffer_callback) return Pickle5SerializedObject( inband, writer, self.get_and_clear_contained_object_ids())
def serialize(self, value): """Serialize an object. Args: value: The value to serialize. """ if isinstance(value, bytes): # If the object is a byte array, skip serializing it and # use a special metadata to indicate it's raw binary. So # that this object can also be read by Java. return RawSerializedObject(value) if self.worker.use_pickle: writer = Pickle5Writer() if ray.cloudpickle.FAST_CLOUDPICKLE_USED: inband = pickle.dumps(value, protocol=5, buffer_callback=writer.buffer_callback) else: inband = pickle.dumps(value) return Pickle5SerializedObject(inband, writer) else: try: serialized_value = self._store_and_register_pyarrow(value) except TypeError: # TypeError can happen because one of the members of the object # may not be serializable for cloudpickle. So we need # these extra fallbacks here to start from the beginning. # Hopefully the object could have a `__reduce__` method. self.register_custom_serializer(type(value), use_pickle=True) logger.warning("WARNING: Serializing the class {} failed, " "falling back to cloudpickle.".format( type(value))) serialized_value = self._store_and_register_pyarrow(value) return ArrowSerializedObject(serialized_value)