酸洗提升python功能

时间:2011-08-17 07:46:03

标签: python pickle boost-python

对于joblib.Parallel的使用,我需要能够pickle一个boost :: python函数。 当我尝试这样做时,我得到了一个

TypeError: can't pickle builtin_function_or_method objects

据我了解,该功能应仅由完全限定名称进行腌制。 我不明白为什么这是不可能的。 有什么想法吗?

1 个答案:

答案 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))