Уведомления

Группа в Telegram: @pythonsu

#1 Март 10, 2010 17:37:42

boltayka
От:
Зарегистрирован: 2009-10-07
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

ускорение копирования файлов.

Понадобилось мне тут копировать один файл 99999 раз (не спрашивайте, шиза.)
Файл весит всего 643 байта…
Без проблем написал скрипт:

import shutil
picture = 'C:\\Users\\Boltayka\\Pictures\\99999\\1.jpg'
path = 'C:\\Users\\Boltayka\\Pictures\\99999\\'
filetype = '.jpg'
for i in range(2, 99999, 1):
shutil.copy(picture, path+str(i)+filetype)
print str(i)+'.jpg'
Но теперь озадачился вопросом, можно ли как-то ускорить процесс? :D Обращаюсь в основном к экспертам, т.к. им оптимизация лучше известна…

Отредактировано (Март 10, 2010 17:40:17)

Офлайн

#2 Март 10, 2010 17:47:09

knkd
От:
Зарегистрирован: 2009-06-14
Сообщения: 225
Репутация: +  0  -
Профиль   Отправить e-mail  

ускорение копирования файлов.

Купить более быстрый винт.
В Линуксе использовать несколько потоков - из за кеширования скорость будет огромной.



Офлайн

#3 Март 10, 2010 17:53:18

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

ускорение копирования файлов.

Все действительно упирается в скорость работы винта и FS.
Хотя оптимизировать чуть чуть можно. Зачем каждый раз читать один и тот же файл? Прочитайте один раз в память и писать потом. Обращений К диску меньше будет.



Отредактировано (Март 10, 2010 17:58:53)

Офлайн

#4 Март 10, 2010 17:57:19

boltayka
От:
Зарегистрирован: 2009-10-07
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

ускорение копирования файлов.

А почему на винде нельзя использовать несколько потоков? Допустим, если все приложения отключить, и даже отойти от компа?…)


p.s. Можно ли как-то запускать несколько потоков в 1м файле? (не запуская 10 интерпретаторов)


Прочитайте один раз в память и писать потом.
Можно пример? :)

Отредактировано (Март 10, 2010 17:59:11)

Офлайн

#5 Март 10, 2010 17:59:49

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

ускорение копирования файлов.

boltayka
. Можно ли как-то запускать несколько потоков в 1м файле?
смотреть модуль thread
boltayka
Можно пример? :)
это ж элементарно….
pic=open(FILENAME,'rb').read()
for x in что_там_у_вам:
f=open(FILENAME_OUT,'wb')
f.write(pic)
f.close()



Отредактировано (Март 10, 2010 18:02:20)

Офлайн

#6 Март 10, 2010 18:09:30

boltayka
От:
Зарегистрирован: 2009-10-07
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

ускорение копирования файлов.

О. Спасибо!
Действительно немного скорость увеличилась (пока-что в один поток запустил)…
Потом попробую с потоками разобраться…

Офлайн

#7 Март 10, 2010 18:20:25

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

ускорение копирования файлов.

да и вообще такое количество файлов в одной папке это ужасный тормоз.
P.S. Пользуясь случаем, никто случайно не видел FUSE под windows с биндингом для python?



Офлайн

#8 Март 10, 2010 22:18:12

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

ускорение копирования файлов.

igor.kaist
P.S. Пользуясь случаем, никто случайно не видел FUSE под windows с биндингом для python?
FUSE под маздай? А зачем?



Офлайн

#9 Март 11, 2010 11:17:53

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

ускорение копирования файлов.

ZZZ
FUSE под маздай? А зачем?
реализовать пару интересных задумок. Под linux, например хочу сделать одну штучку для нашей сетки: в расшаренной папке создаешь папку с названием исполнителя, а там чудестным образом появляется музыка :)



Офлайн

#10 Март 11, 2010 20:29:36

knkd
От:
Зарегистрирован: 2009-06-14
Сообщения: 225
Репутация: +  0  -
Профиль   Отправить e-mail  

ускорение копирования файлов.

boltayka
А почему на винде нельзя использовать несколько потоков? Допустим, если все приложения отключить, и даже отойти от компа?…)
Можно, но в винде такого выигрыша не получится - она кеш использует не так активно.

igor.kaist
FUSE под windows с биндингом для python?
Было бы хорошо :(



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version