Есть ли у pathos.multiprocessing starmap?
Я получил ошибку при выполнении кода ниже. Проблема, кажется, map
не поддерживает функции, принимающие несколько входов, как во встроенном Python multiprocessing
пакет. Но во встроенном пакете есть starmap
это решает эту проблему. Есть ли 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)
Ошибка типа: boo () отсутствует 2 обязательных позиционных аргумента: 'y' и 'z'
Обновление лямбда-выражения, как предложено (не работает):
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:
"""
Traceback (последний вызов был последним):
Файл "C:\Users\yg451\Anaconda3\lib\site-packages\multiprocess\pool.py", строка 121, в рабочем
результат = (True, func(*args, **kwds))
Файл "C:\Users\yg451\Anaconda3\lib\site-packages\multiprocess\pool.py", строка 44, в mapstar
список возврата (карта (*args))
Файл "C:\Users\yg451\Anaconda3\lib\site-packages\pathos\helpers\mp_helper.py", строка 15, в
func = лямбда-аргументы: f(*args)
Файл "C:/Users/yg451/Code/foo/Machine Learning/xPype/test/scratch.py", строка 18, в
results = pool.map(лямбда-x: b.boo (* x), [(12, 3, 456), (8, 9, 10), ('a', 'b', 'cde')])
NameError: имя 'b' не определено
"""
1 ответ
Я pathos
автор. pathos
старше чем starmap
и на самом деле это не нужно. Он решал несколько аргументов в пуле точно так же, как встроенный map
делает.
>>> 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
не нужно Однако, как это было недавно добавлено к стандарту Pool
интерфейс в multiprocessing
в некоторых версиях Python он, вероятно, должен быть более заметным в pathos
, Обратите внимание, что уже возможно получить "расширенную" версию starmap
от pathos
если хочешь.
>>> import pathos
>>> mp = pathos.helpers.mp
>>> p = mp.Pool()
>>> p.starmap
<bound method Pool.starmap of <multiprocess.pool.Pool object at 0x1038684e0>>
>>>