Приведенный ниже код возвращает странную ошибку типа в строке 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