相关疑难解决方法(0)

具有多处理功能的Python装饰器失败

我想在函数上使用一个装饰器,我将随后传递给一个多处理池.但是,代码失败了"PicklingError:无法pickle:属性查找__builtin__.function failed".我不太明白为什么它在这里失败了.我确信它很简单,但我找不到它.下面是一个最小的"工作"示例.我认为使用该functools功能足以让这个工作.

如果我注释掉功能装饰,它的工作没有问题.multiprocessing我在这里误会是什么意思?有没有办法让这项工作?

编辑:添加可调用的类装饰器函数装饰器之后,事实证明函数装饰器按预期工作.可调用类装饰器继续失败.什么是可调用的类版本,使其不被腌制?

import random
import multiprocessing
import functools

class my_decorator_class(object):
    def __init__(self, target):
        self.target = target
        try:
            functools.update_wrapper(self, target)
        except:
            pass

    def __call__(self, elements):
        f = []
        for element in elements:
            f.append(self.target([element])[0])
        return f

def my_decorator_function(target):
    @functools.wraps(target)
    def inner(elements):
        f = []
        for element in elements:
            f.append(target([element])[0])
        return f
    return inner

@my_decorator_function
def my_func(elements):
    f = []
    for element in elements:
        f.append(sum(element))
    return f

if __name__ == …
Run Code Online (Sandbox Code Playgroud)

python decorator multiprocessing

17
推荐指数
1
解决办法
4532
查看次数

标签 统计

decorator ×1

multiprocessing ×1

python ×1