Python TypeError при передаче выходных данных в пул рабочих.Хотите разбить большой файл на куски строк - PullRequest
0 голосов
/ 23 мая 2018

Приведенный ниже код возвращает странную ошибку типа в строке job.get ():

multiprocessing.pool.RemoteTraceback: """ Traceback (most recent call last):   File "C:\Python36\lib\multiprocessing\pool.py", line 119, in worker
    result = (True, func(*args, **kwds))   File "G:\emd\mppurger.py", line 41, in process_wrapper
    run(line)   File "G:\emd\mppurger.py", line 25, in run
    if correct(copy):   File "G:\emd\mppurger.py", line 4, in correct
    print('Not Equal to 14? ' + item) TypeError: must be str, not list """

job.get()
  File "C:\Python36\lib\multiprocessing\pool.py", line 644, in get
    raise self._value
TypeError: must be str, not list
TypeError "string not list".

File "g:\EMD\mppurger.py", line 76, in <module>
  job.get()
File "C:\Python36\Lib\multiprocessing\pool.py", line 644, in get
  raise self._value

builtins.TypeError: must be str, not list

Единственным списком должен быть список работ.Но это итератор, а не итератор?

Я предполагаю, что это относится к аргументам, которые я пытаюсь передать функции process_wrapper.

cores=16
pool = mp.Pool(cores)
jobs = []

#create jobjs
for chunkStart, chunkSize in chunkify("out.txt"):
    jobs.append( pool.apply_async(process_wrapper,(chunkStart, chunkSize )))

#wait for all jobs to finish
for job in jobs:
    job.get()

#clean up
pool.close()

Моя функция генератора, которая создает chunkStart chunkSizeвыглядит следующим образом:

def chunkify(fname,size=1024*1024):
    fileEnd = os.path.getsize(fname)
    with open(fname,'r') as f:
        chunkEnd = f.tell()
        while True:
            chunkStart = chunkEnd
            f.seek(chunkStart + size, 0)
            f.readline()
            chunkEnd = f.tell()
            chunkSize = chunkEnd-chunkStart
            yield chunkStart, chunkSize
            if chunkEnd > fileEnd:
                break

1 Ответ

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

Я собираюсь предположить, что это ошибка отступа или что-то в этом роде.Я не смог найти ошибку, но после переписывания кода она исчезла.

...