首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pathos.multiprocessing有星图吗?

pathos.multiprocessing有星图吗?
EN

Stack Overflow用户
提问于 2019-01-23 09:42:44
回答 1查看 2.7K关注 0票数 4

我执行下面的代码时出错了。问题似乎是map不支持接受多个输入的函数,就像python内置的multiprocessing包一样。但是在内置包中,有一个解决这个问题的starmappathos.multiprocessing也有同样的功能吗?

代码语言:javascript
复制
import pathos.multiprocessing as mp


class Bar:
    def foo(self, name):
        return len(str(name))

    def boo(self, x, y, z):
        sum = self.foo(x)
        sum += self.foo(y)
        sum += self.foo(z)
        return sum


if __name__ == '__main__':
    b = Bar()
    pool = mp.ProcessingPool()
    results = pool.map(b.boo, [(12, 3, 456), (8, 9, 10), ('a', 'b', 'cde')])
    print(results)

TypeError: boo()缺少2个必需的位置参数:'y‘和'z’

建议的lambda表达式的更新(不起作用):

代码语言:javascript
复制
if __name__ == '__main__':
    b = Bar()
    pool = mp.ProcessingPool()
    results = pool.map(lambda x: b.boo(*x), [(12, 3, 456), (8, 9, 10), ('a', 'b', 'cde')])
    print(results)

multiprocess.pool.RemoteTraceback: ""“ 回溯(最近一次调用): 文件"C:\Users\yg451\Anaconda3\lib\site-packages\multiprocess\pool.py",第121行,在worker中 结果=(真、函数(*args、**kwds)) 文件"C:\Users\yg451\Anaconda3\lib\site-packages\multiprocess\pool.py",第44行,在mapstar中 返回列表(map(*args)) 文件"C:\Users\yg451\Anaconda3\lib\site-packages\pathos\helpers\mp_helper.py",第15行,在 func = lambda args: f(*args) 文件“C:/Users/ in 451/Code/foo/Machine Learning/xPype/test/划痕.in”,第18行 结果= pool.map(lambda : b.boo(*x),(12,3,456),(8,9,10),('a','b',‘cde’) NameError:未定义名称'b‘ ""“

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-23 13:56:30

我是pathos的作者。pathosstarmap更老,并不真正需要它。它解决了一个池中的多个参数,就像内置的map一样。

代码语言:javascript
复制
>>> import pathos.multiprocessing as mp
>>> class Bar:
...     def foo(self, name):
...         return len(str(name))
...     def boo(self, x, y, z):
...         sum = self.foo(x)
...         sum += self.foo(y)
...         sum += self.foo(z)
...         return sum
... 
>>> b = Bar()
>>> pool = mp.ProcessingPool()
>>> f = lambda x: b.boo(*x)    
>>> results = pool.map(f, [(12, 3, 456), (8, 9, 10), ('a', 'b', 'cde')])
>>> results 
[6, 4, 5]
>>> results = pool.map(b.boo, [12, 9, 'a'], [3, 9, 'b'], [456, 10, 'cde'])
>>> results
[6, 4, 5]
>>> results = map(b.boo, [12, 9, 'a'], [3, 9, 'b'], [456, 10, 'cde'])
>>> list(results)
[6, 4, 5]
>>> 

因此,本质上,starmap是不必要的。但是,由于最近在某些版本的python中已经将它添加到multiprocessing中的标准multiprocessing接口中,所以它在pathos中可能会更加突出。请注意,如果您愿意的话,可以从starmap获得“增强型”的pathos版本。

代码语言:javascript
复制
>>> import pathos
>>> mp = pathos.helpers.mp
>>> p = mp.Pool()
>>> p.starmap
<bound method Pool.starmap of <multiprocess.pool.Pool object at 0x1038684e0>>
>>> 
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54324215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档