Python 多处理 pool.apply_async() 结果访问通过 result.get() 抛出 TypeErr



我想在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()

而不是传递对象的属性rnoresult.get()抛出错误TypeError: 'int' object is not callable

有什么提示吗?我在这里错过了什么?

提前感谢您的帮助!

PS:请注意,在我的实际应用程序中,该方法的返回值solve()提供另一种数据类型,而结构会动态变化。但看起来如果我通常错过了一些东西..

我自己找到了解决方案!

错误是我已将方法的结果传递给池,而不是函数本身。

下面是一个工作示例:

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, args, kwargs]

if __name__ == '__main__':
# sample data
models = [Model() for m in range(0, 10)]
args = [1, 2]
kwds = {'foo': 3, 'bar': 4}
pool = mp.Pool(processes=mp.cpu_count())
for m in models:
result = pool.apply_async(m.solve, args=args, kwds=kwds)
print(result.get())
pool.close()
pool.join()

很抱歉打扰您..

相关内容

  • 没有找到相关文章

最新更新