对于joblib.Parallel的使用,我需要能够pickle一个boost :: python函数。 当我尝试这样做时,我得到了一个
TypeError: can't pickle builtin_function_or_method objects
据我了解,该功能应仅由完全限定名称进行腌制。 我不明白为什么这是不可能的。 有什么想法吗?
答案 0 :(得分:1)
如果你想在joblib.Parallel对象中使用你的boost方法,也许你可以使用你的boost方法的包装器:
from joblib import Parallel, delayed
from boost import boost_function
class Wrapper(object):
def __init__(self, method_name, module_name):
self.method_name = method_name
self.module_name = module_name
def __call__(self, *args, **kwargs):
method = __import__(self.module_name, globals(), locals(), [self.method_name,])
return method(*args, **kwargs)
Parallel(n_jobs=1)(delayed(Wrapper("boost_module_name_with_dots", "boost_method_name")(i) for i in range(10))