Я пытаюсь обработать текстовый файл объемом 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)
Вопросы:
- Это действительно ускорит процесс? Я имею в виду, что файл все еще читается последовательно каждым из процессов, просто обработка ограничена только указанными c строками. IMO это может ускорить процесс, если предположить, что обработка строки занимает значительно больше времени, чем чтение строки.
- Существуют ли ограничения на количество процессов, которые я могу запустить в Parallel, особенно в отношении того, сколько файловых соединений я могу открыть в Parallel? (Другими словами, если у меня есть доступ к 80-ядерному компьютеру, могу ли я запустить 160 процессов в параллельном режиме?)
- Есть ли лучший способ чтения больших файлов в параллельном режиме в Python?