Как получить индекс доходности? - PullRequest
0 голосов
/ 24 мая 2018

У меня есть такой код:

def iter_commit(LogFileName):
    with open(path.join(__folder__, LogFileName)) as LogFileName_file:
        for index, schema in enumerate(LogFileName_file):
            if len(schema) > 10:
                yield index, schema.rstrip('\n')

def makePool(cP, func, iters):
    try:
        pool = ThreadPool(cP)

        pool.map_async(func,iters).get(99999)
        pool.close()
        pool.join()
    except:
        print('Pool Error')
        raise
    finally:
        pool.terminate()

def Parse(RoWnum, Link):
    print(RoWnum, Link)


makePool(50, partial(Parse, iter_commit(strSiteMap)[0]),
                            iter_commit(strSiteMap)[1])

Но я получаю ошибку TypeError: 'generator' object is not subscriptable

Так как же получить индекс yield?

1 Ответ

0 голосов
/ 24 мая 2018

Возможно, я не до конца понимаю, что вы пытаетесь сделать, но, возможно, следующее, которое не использует 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...