我正在尝试将现有的大代码修改为多处理方式。我简化了这个问题。
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()
答案 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>)