Добрый день. Имеется файл на 40 миллионов строк (5гб веса), нужно каждую строку прочитать, отформатировать ее и записать в другой файл.
Если пробовать просто читать построчно, то выходит очень долго:
with io.open('part1.txt', encoding='utf_8_sig') as file:
for line in file:
process(line)
Пробовал таким методом:
import multiprocessing as mp
def process(line):
#Тут обрабатываю строку и сохраняю в файл ее
def process_wrapper(lineByte):
with open("part1.txt") as f:
f.seek(lineByte)
line = f.readline()
process(line)
pool = mp.Pool(2)
jobs = []
with open("part1.txt") as f:
nextLineByte = f.tell()
for line in f:
jobs.append( pool.apply_async(process_wrapper,(nextLineByte)) )
nextLineByte = f.tell()
for job in jobs:
job.get()
pool.close()
Но получаю ошибку:
Traceback (most recent call last):
File "/home/test.py", line 20, in <module>
nextLineByte = f.tell()
OSError: telling position disabled by next() call
В каком направлении лучше копать? Обработа ведется на сервере с 8 ядрами и 8гб оперативной памяти