我想在multiprocessing
模块中使用对象方法的返回值。从文档中我认为这可以通过multiprocessing.pool.AsyncResult.get
.
但相反,在我的情况下会引发错误,而通常应该返回一个整数值。
这是一个最小的例子:
import multiprocessing as mp
from random import randrange
class Model():
def __init__(self):
self.rno = randrange(100)
def solve(self, *args, **kwargs):
print(args, kwargs)
return self.rno
if __name__ == '__main__':
# sample data
models = [Model() for m in range(0, 10)]
args = [1, 2]
kwds = {'foo': 3, 'bar': 4}
# execution
pool = mp.Pool(processes=mp.cpu_count())
for m in models:
result = pool.apply_async(m.solve(*args, **kwds))
print(result.get())
pool.close()
pool.join()
而不是传递rno
对象的属性result.get()
会引发错误TypeError: 'int' object is not callable
。
有什么提示吗?我在这里想念什么?
在此先感谢您的帮助!
PS:请注意,在我的实际应用程序中,该方法的返回值solve()
提供了另一种数据类型,而结构是动态变化的。但看起来我是否通常会遗漏一些东西..