Возможно, я не до конца понимаю, что вы пытаетесь сделать, но, возможно, следующее, которое не использует functools.partial()
, может помочь, потому что оно работает без значения индекса.Что он делает, так это передает вашей makePool()
функции итератор, который будет генерировать парные значения, ожидаемые функцией Parse()
, и передает их в виде кортежа.
from multiprocessing.pool import ThreadPool
def pairwise(iterable):
"s -> (s0,s1), (s2,s3), (s4, s5), ..."
a = iter(iterable)
return zip(a, a)
strSiteMap = ['site0', 13, 'site1', 42]
def makePool(cP, func, iters):
try:
pool = ThreadPool(cP)
pool.map_async(func, iters).get(99999)
pool.close()
pool.join()
except Exception:
print('Pool Error')
raise
finally:
pool.terminate()
def Parse(args):
RowNum, Link = args
print('Parse({!r}, {!r}) called'.format(RowNum, Link))
makePool(50, Parse, pairwise(strSiteMap))