我正在尝试实现元类/装饰器工具,以使代码易于并行化。我正在使用Python的多处理程序。
说我有
row.names = F
执行pool.starmap()时,我得到:
class Worker(metaclass=Parallelizable):
def __init__(self):
super().__init__()
# annotate some method for parallele computation
@ParalleleMethod
def long_calculation(self, data):
# do stuff
return ans
class ParalleleMethod:
def __init__(self, func):
self.func = func
def __call__(self, data):
# as a prototype of the idea I want to get to
pool.starmap(self.func, data)
我猜这是原因:
请注意,功能(内置和用户定义)由“完全 合格”名称参考,而不是按值。 2这意味着只有 腌制函数名称以及模块名称 函数是在其中定义的。函数的代码或其任何形式均未定义 函数属性被腌制。因此,定义模块必须是 可在解酸环境中导入,并且模块必须包含 命名的对象,否则将引发异常。
自从我将该函数作为对象传递给 init 以来,该对象已不再完全合格。
有没有一种方法可以将“完全资格”再次“添加”到self.func中?假设是,如果我能够做到这一点,则酸洗会起作用-它会找到需要酸洗的定义(并在其他过程中解酸)?