酸洗静态方法 - Python

时间:2014-01-14 12:17:54

标签: python multiprocessing static-methods pickle

我正在使用类在Python中进行一些多处理,为了做到这一点,我必须使用这个approach

def _pickle_method(method):
    func_name = method.im_func.__name__
    obj = method.im_self
    cls = method.im_class
    if func_name.startswith('__') and not func_name.endswith('__'): #deal with mangled names
        cls_name = cls.__name__.lstrip('_')
        func_name = '_' + cls_name + func_name
    print cls
    return _unpickle_method, (func_name, obj, cls)


def _unpickle_method(func_name, obj, cls):
    for cls in cls.__mro__:
        try:
            func = cls.__dict__[func_name]
        except KeyError:
            pass
        else:
            break
    return func.__get__(obj, cls)

问题是'因为我有一些静态方法也应该并行化。但是我found用这个我不能腌制静态方法。我想知道有一种方法可以改变这种方法来做这样的事情,所以我可以腌制非静态和静态方法。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

我不确定你要做什么......但是如果你想使用类和multiprocessing,除非你跳到标准库之外,否则它会很难看。

如果使用名为multiprocessing的{​​{1}}的分支,则可以在多处理的pathos.multiprocesssing函数中直接使用类和类方法。这是因为map代替dillpickle,而cPickle可以在python中序列化几乎所有内容。

dill还提供异步映射函数......它可以pathos.multiprocessing具有多个参数的函数(例如map

请参阅: What can multiprocessing and dill do together?

和: http://matthewrocklin.com/blog/work/2013/12/05/Parallelism-and-Serialization/

map(math.pow, [1,2,3], [4,5,6])

在此处获取代码:  https://github.com/uqfoundation/pathos

相关问题