У меня есть вызов подпроцесса python, который запускает исполняемый файл и выводит вывод на мой основной файл subprocess.
В случаях, когда данные stdout относительно малы (~ 2k строк), производительность между чтением строки за строкой и чтением как фрагмента (stdout.read()) сопоставима... с stdout.read() немного быстрее.
Как только данные станут больше (скажем, 30k + строк), производительность для чтения по строкам значительно лучше.
Это мое сравнение script:
proc=subprocess.Popen(executable,stdout=subprocess.PIPE)
tic=time.clock()
for line in (iter(proc.stdout.readline,b'')):
tmp.append(line)
print("line by line = %.2f"%(time.clock()-tic))
proc=subprocess.Popen(executable,stdout=subprocess.PIPE)
tic=time.clock()
fullFile=proc.stdout.read()
print("slurped = %.2f"%(time.clock()-tic))
И это результаты для чтения ~ 96k строк (или 50 Мб на диске):
line by line = 5.48
slurped = 153.03
Я не понимаю, почему разница в производительности настолько экстремальна. Я ожидаю, что версия read() должна быть быстрее, чем сохранение результатов по строкам. Конечно, я ожидал более быстрых линейных результатов в практическом случае, когда на каждой строке обрабатывается значительная часть, которую можно было бы сделать во время чтения.
Может ли кто-нибудь дать мне представление о затратах на чтение()?