Я читал аналогичную ветку, в которой OP хотел обработать каждую строку в функции с использованием многопроцессорной обработки (найдено здесь). Ответ на этот интригующий вопрос был следующим:
from multiprocessing import Pool
def process_line(line):
return "FOO: %s" % line
if __name__ == "__main__":
pool = Pool(4)
with open('file.txt') as source_file:
# chunk the work into batches of 4 lines at a time
results = pool.map(process_line, source_file, 4)
Мне интересно, можете ли вы сделать то же самое, но вместо того, чтобы возвращать каждую обработанную строку, запишите ее в другой файл.
В основном я хочу посмотреть, есть ли способ MP читать и писать файл, чтобы разделить его по строкам. Скажем, я хочу 100 000 строк в файле.
from multiprocessing import Pool
def write_lines(line):
#need method to write lines to multiple files, perhaps a Queue?
if __name__ == "__main__":
#all my procs
pool = Pool()
with open('file.txt') as source_file:
# chunk the work into batches of 4 lines at a time
results = pool.map(process_line, source_file, 100000)
Я мог бы использовать MP Queue, чтобы разделить файл на отдельные объекты Queue, а затем заполнить каждый процессор заданием по записи всех строк, но мне все равно нужно сначала прочитать файл. Так будет ли он всегда полностью привязан к вводу/выводу и никогда не сможет эффективно работать в режиме MP?