Python 3.x pathos.multiprocessing有星图吗?

Python 3.x pathos.multiprocessing有星图吗?,python-3.x,multiprocessing,pathos,Python 3.x,Multiprocessing,Pathos,我在执行下面的代码时出错。问题似乎在于map不支持接受多个输入的函数,就像python内置的多处理包一样。但是在内置的包中,有一个星图可以解决这个问题。pathos.multiprocessing有相同的功能吗 import pathos.multiprocessing as mp class Bar: def foo(self, name): return len(str(name)) def boo(self, x, y, z): sum

我在执行下面的代码时出错。问题似乎在于map不支持接受多个输入的函数,就像python内置的多处理包一样。但是在内置的包中,有一个星图可以解决这个问题。pathos.multiprocessing有相同的功能吗

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表达式更新无效:

multiprocess.pool.RemoteTraceback:

回溯最近一次呼叫上次:

文件 C:\Users\yg451\Anaconda3\lib\site packages\multiprocess\pool.py, 第121行,输入

结果=真,函数*参数,**kwds

文件 C:\Users\yg451\Anaconda3\lib\site packages\multiprocess\pool.py, 第44行,地图之星

返回listmap*参数

文件 C:\Users\yg451\Anaconda3\lib\site packages\pathos\helpers\mp\u helper.py, 第15行,在

func=lambda参数:f*args

文件C:/Users/yg451/Code/foo/Machine 学习/xPype/test/scratch.py,第18行,输入

结果=pool.maplambda x:b.boo*x,[12,3456,8,9,10,'a','b','cde']

名称错误:未定义名称“b”

我是《悲情》的作者。pathos比星图更古老,并不真正需要它。它以与内置映射完全相同的方式解决池中的多个参数

因此,基本上,星图是不必要的。但是,由于最近在某些版本的python中,它被添加到了多处理的标准池接口中,因此它在pathos中可能会更突出。请注意,如果您愿意,可以从pathos获得星图的增强版

>>> import pathos
>>> mp = pathos.helpers.mp
>>> p = mp.Pool()
>>> p.starmap
<bound method Pool.starmap of <multiprocess.pool.Pool object at 0x1038684e0>>
>>> 

为什么不让你的函数接受一个元组呢?或者使用lambda x:b.boo*x?嗯,大多数函数不是接受多个参数而不是元组吗?让所有可能并行的函数都接受一个元组有点难看。对于lambda表达式解决方案,我尝试了,…pool.maplambda x:b.boo*x,…,它不起作用,似乎python多重处理在lambda表达式上根本不起作用它怎么不起作用?在内部,lambda和正则函数之间没有区别,所以我很难相信。相信我,我相信你很难相信,就像我过去很难相信那样,或者我只是做错了。我将更新,以显示我尝试了什么,以及它是如何不起作用的。从马口中得到它真是太棒了:谢谢你澄清了这一点!你能详细说明一下你提到的这张增强星图吗?我一定是遗漏了什么,但这p不就是内置的multiprocessing.pool.pool吗,为什么我不需要pathos来构建它呢?注意,它是多进程的,而不是多进程的。。。这表明池使用dill而不是pickle进行高级序列化。哦…,我的错!非常感谢。
>>> 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]
>>> 
>>> import pathos
>>> mp = pathos.helpers.mp
>>> p = mp.Pool()
>>> p.starmap
<bound method Pool.starmap of <multiprocess.pool.Pool object at 0x1038684e0>>
>>>