Files
ray/lib/python/halo/serialization.py
T
2016-06-03 18:32:57 -07:00

40 lines
1.5 KiB
Python

import importlib
import halo
def to_primitive(obj):
if hasattr(obj, "serialize"):
primitive_obj = ((type(obj).__module__, type(obj).__name__), obj.serialize())
else:
primitive_obj = ("primitive", obj)
return primitive_obj
def from_primitive(primitive_obj):
if primitive_obj[0] == "primitive":
obj = primitive_obj[1]
else:
# This code assumes that the type module.__dict__[type_name] knows how to deserialize itself
type_module, type_name = primitive_obj[0]
module = importlib.import_module(type_module)
obj = module.__dict__[type_name]()
obj.deserialize(primitive_obj[1])
return obj
def serialize(worker_capsule, obj):
primitive_obj = to_primitive(obj)
obj_capsule, contained_objrefs = halo.lib.serialize_object(worker_capsule, primitive_obj) # contained_objrefs is a list of the objrefs contained in obj
return obj_capsule, contained_objrefs
def deserialize(worker_capsule, capsule):
primitive_obj = halo.lib.deserialize_object(worker_capsule, capsule)
return from_primitive(primitive_obj)
def serialize_task(worker_capsule, func_name, args):
primitive_args = [(arg if isinstance(arg, halo.lib.ObjRef) else to_primitive(arg)) for arg in args]
return halo.lib.serialize_task(worker_capsule, func_name, primitive_args)
def deserialize_task(worker_capsule, task):
func_name, primitive_args, return_objrefs = halo.lib.deserialize_task(worker_capsule, task)
args = [(arg if isinstance(arg, halo.lib.ObjRef) else from_primitive(arg)) for arg in primitive_args]
return func_name, args, return_objrefs