Я получил ошибку при выполнении кода ниже. Кажется, проблема в том, что 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)
TypeError: 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 \ сайт-пакеты \ нескольких процессов \ pool.py",
линия 121, в рабочем
result = (True, func (* args, ** kwds))
Файл
"C: \ Users \ yg451 \ Anaconda3 \ Lib \ сайт-пакеты \ нескольких процессов \ pool.py",
линия 44, в mapstar
список возврата (карта (* args))
Файл
"C: \ Users \ yg451 \ Anaconda3 \ Lib \ сайт-пакеты \ пафоса \ хелперы \ 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' не определено
"" "