在多处理期间在函数中调用类

时间:2018-08-11 12:37:27

标签: python class multiprocessing pool

我正在尝试将现有的大代码修改为多处理方式。我简化了这个问题。

A类是一个很大的外部类,我无法更改。我想在不同的内核中运行该类,所以我使用multiprocessing.Pool。但是我在第AttributeError: 'int' object has no attribute 'fun'行的return input_class.fun(x)中遇到了一个错误

如何解决此问题?

from multiprocessing import Pool
from functools import partial

class A(object):
    def __init__(self,value):
        self.value = value
    def fun(self,x):
        return self.value**x

def B(x,input_class):
    return input_class.fun(x)

if __name__ == '__main__':
    l = range(10)

    p = Pool(4)

    input_class = A(3)
    input_function = partial(B,input_class)
    op = p.map(input_function,l) 
    print(op)

    p.close()
    p.join()   

1 个答案:

答案 0 :(得分:0)

您对partial的使用无法满足您的要求:

input_function = partial(B,input_class)

这等效于input_function = lambda input_class__: B(input_class, input_class__)。因此,该函数的 first 参数现在等于input_class,而不是第二个参数,并且现在调用input_function会将整数作为{{1 }},那么您将获得B

将此更改为:

<integer>.fun(<input_class>)