Как прочитать большой файл с помощью мультиобработки? - PullRequest
1 голос
/ 04 мая 2020

Я пытаюсь обработать текстовый файл объемом 51 ГБ в Python. Вот моя попытка параллельной обработки этого файла:

def parallel_read(pid, filename, num_processes):
    with codecs.open(filename) as infile:
        for num, line in enumerate(infile):
            index = num % num_processes
            if index != pid:   # Only process lines corresponding to your ProcessId. Discard others.
                continue
            process_line(line)   


def main(file_to_read):
    num_processes = 8
    arguments = []
    for x in range(num_processes):
        arguments.append((x, file_to_read, num_processes))
    pool = mp.Pool(num_processes)
    results = pool.starmap(parallel_read, arguments)

Вопросы:

  1. Это действительно ускорит процесс? Я имею в виду, что файл все еще читается последовательно каждым из процессов, просто обработка ограничена только указанными c строками. IMO это может ускорить процесс, если предположить, что обработка строки занимает значительно больше времени, чем чтение строки.
  2. Существуют ли ограничения на количество процессов, которые я могу запустить в Parallel, особенно в отношении того, сколько файловых соединений я могу открыть в Parallel? (Другими словами, если у меня есть доступ к 80-ядерному компьютеру, могу ли я запустить 160 процессов в параллельном режиме?)
  3. Есть ли лучший способ чтения больших файлов в параллельном режиме в Python?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...