исключение неподдерживаемых типов операндов с ThreapPool.map, но не с картой? - PullRequest
1 голос
/ 18 декабря 2010

Почему работает встроенная карта, но не работает многопроцессорная карта ThreadPool?

from multiprocessing.pool import ThreadPool

def identity(a, b): return (a, b)

map(identity, [1, 2, 3], [4, 5, 6])

p = ThreadPool(2)

#gives above error:
p.map(identity, [1, 2, 3], [4, 5, 6])

edit: После некоторого копания карта пула потоков, по-видимому, не поддерживает карту в стиле vararg, т.е., i1, i2, i3, ... in) где i1 соответствует первому аргументу f, i2 - второму и т. д. Исключение выдается, потому что список, который я предоставлял, интерпретируется как размер чанка или какое-то другое целое числопозиционный аргумент.

Независимо от того, аккуратные решения будут оценены.

1 Ответ

1 голос
/ 18 декабря 2010
from multiprocessing.pool import ThreadPool

def identity((a,b)): return a, b

print map(identity, zip([1, 2, 3], [4, 5, 6]))

p = ThreadPool(2)

#gives above error:
print p.map(identity, zip([1, 2, 3], [4, 5, 6]))

Выход

[(1, 4), (2, 5), (3, 6)]
[(1, 4), (2, 5), (3, 6)]
...