документы для применения (func [, args [, kwds]]) говорят, что
Блокируется, пока результат не будетготовы. Учитывая эти блоки, apply_async () лучше подходит для параллельной работы. Кроме того, func выполняется только в одном из работников пула.
Это означает, что вы обрабатываете строки входного файла, последовательно блокируя пул, пока результаты не будут получены одним из работников пула. Во-вторых, я не думаю, что вы получите заметное ускорение, пытаясь разделить обработку разных строк входного файла между работниками пула. Я скажу вам больше, я думаю, вы немного замедлите весь процесс, тратя больше времени на передачу данных между процессами, чем фактически экономя время на самой обработке, так как в вашем случае это не длительный процессjob.
Возможно, стоит попытаться распараллелить обработку нескольких входных файлов, но, учитывая тот факт, что они обычно хранятся на одном и том же жестком диске, это также не даст вам никакого ускорения .
КСТАТИ Если вы найдете это полезным, вот как сделать обработку, используя bash
и awk
в одну строку:
while read line; do echo $line | awk '{for(i = 0; i < $2 - $1; i++) print $3}'; done < input.txt > output.txt
Это ваше input.txt
:
0 2 0
2 5 1
5 10 2
10 14 5
И это то, что вы получаете в файле output.txt
:
0
0
1
1
1
2
2
2
2
2
5
5
5
5
Используя этот подход, вы можете запустить несколько заданий втерминал и посмотрите, ускорит ли он обработку нескольких файлов.