Я хотел бы знать, эффективна ли параллельная запись файлов. Действительно, на жестком диске есть одна удобная читаемая голова за раз. Таким образом, HDD может выполнять одну задачу за раз. Но ниже тест (в Python) противоречит тому, что я ожидал:Параллельное создание файлов эффективно?
Файл скопировать около 1 Gb
Сценарий 1 (// задача для чтения и записи строки по линии 10 раз один и тот же файл):
#!/usr/bin/env python
from multiprocessing import Pool
def read_and_write(copy_filename):
with open("/env/cns/bigtmp1/ERR000916_2.fastq", "r") as fori:
with open("/env/cns/bigtmp1/{}.fastq".format(copy_filename) , "w") as fout:
for line in fori:
fout.write(line + "\n")
return copy_filename
def main():
f_names = [ "test_jm_{}".format(i) for i in range(0, 10) ]
pool = Pool(processes=4)
results = pool.map(read_and_write, f_names)
if __name__ == "__main__":
main()
сценарий 2 (задача читать и писать линию по линии 10 раз один и тот же файл):
#!/usr/bin/env python
def read_and_write(copy_filename):
with open("/env/cns/bigtmp1/ERR000916_2.fastq", "r") as fori:
with open("/env/cns/bigtmp1/{}.fastq".format(copy_filename) , "w") as fout:
for line in fori:
fout.write(line + "\n")
return copy_filename
def main():
f_names = [ "test_jm_{}".format(i) for i in range(0, 10) ]
for n in f_names:
result = read_and_write(n)
if __name__ == "__main__":
main()
сценарий 3 (// задача скопировать 10 раз один и тот же файл):
#!/usr/bin/env python
from shutil import copyfile
from multiprocessing import Pool
def read_and_write(copy_filename):
copyfile("/env/cns/bigtmp1/ERR000916_2.fastq", "/env/cns/bigtmp1/{}.fastq".format(copy_filename))
return copy_filename
def main():
f_names = [ "test_jm_{}".format(i) for i in range(0, 10) ]
pool = Pool(processes=4)
results = pool.map(read_and_write, f_names)
if __name__ == "__main__":
main()
сценарий 4 (задача скопировать 10 раз один и тот же файл):
#!/usr/bin/env python
from shutil import copyfile
def read_and_write(copy_filename):
copyfile("/env/cns/bigtmp1/ERR000916_2.fastq", "/env/cns/bigtmp1/{}.fastq".format(copy_filename))
return copy_filename
def main():
f_names = [ "test_jm_{}".format(i) for i in range(0, 10) ]
for n in f_names:
result = read_and_write(n)
if __name__ == "__main__":
main()
Результаты:
$ # // task to read and write line by line 10 times a same file
$ time python read_write_1.py
real 1m46.484s
user 3m40.865s
sys 0m29.455s
$ rm test_jm*
$ # task to read and write line by line 10 times a same file
$ time python read_write_2.py
real 4m16.530s
user 3m41.303s
sys 0m24.032s
$ rm test_jm*
$ # // task to copy 10 times a same file
$ time python read_write_3.py
real 1m35.890s
user 0m10.615s
sys 0m36.361s
$ rm test_jm*
$ # task to copy 10 times a same file
$ time python read_write_4.py
real 1m40.660s
user 0m7.322s
sys 0m25.020s
$ rm test_jm*
Эти основы результаты кажется, показывают, что // ИО читать и писать более эффективным.
Спасибо вам зажигать
Какие у вас есть данные для жесткого диска, имеющего одну прочитанную головку? –
Любые данные, которые вы пишете в файл, просто будут сидеть в ОЗУ вашего компьютера, пока операционная система вашего компьютера не начнет сопоставлять его и на самом деле быстро записать на диск. – kindall
Какие результаты вы ожидали? – AChampion