Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 4, 2014 13:04:56

childeroland
Зарегистрирован: 2014-02-04
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Копирование большого (больших) файлов в python

Здравствуйте все!!! Интересует вопрос: пишу простенький пока скрипт, который копирует определённые файлы .dbf, запускает индексацию (внешним приложением, собственно, не важно), а затем запускает ещё одно приложенице для обработки этих .dbf'ок… На данном этапе у меня всё работает, однако возник вопрос, который не даёт мне покоя уже несколько дней, но на который я не смог найти вразумительного ответа, а именно: искомые файлы копируются с некого сетевого ресурса в локальной сети, объём их различен, в среднем по 2Гб, на копирование одного только файла у меня уходит около часа. Использую функцию shutil.copy… Есть ли способы увеличить скорость копирования файлов?

Офлайн

#2 Фев. 4, 2014 13:20:00

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Копирование большого (больших) файлов в python

Лучше обрабатывать их на родной стороне.

Офлайн

#3 Фев. 4, 2014 13:32:52

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Копирование большого (больших) файлов в python

childeroland
для начала, “по сети” означает Windows сеть и сетевые диски?
И да никто не запретит вам в таком случае самому открывать файл, блоками читать и писать в другой файл. На счет скорости не знаю. Проверьте сами и отпишитесь



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Фев. 4, 2014 15:14:49

childeroland
Зарегистрирован: 2014-02-04
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Копирование большого (больших) файлов в python

Shaman
Лучше обрабатывать их на родной стороне.
На родной стороне нельзя по двум причинам: это система с DOS и Novell NetWare, как туда прикрутить python я даже не знаю (хотелось бы обойтись без упаковки в .exe); во всей этой хрупкой цепочке последняя запускаемая программа формирует ещё одни базы на основе существующих, при этом блокирует доступ к исходным файлам, поэтому обработка запускается на копии

Офлайн

#5 Фев. 4, 2014 15:24:43

childeroland
Зарегистрирован: 2014-02-04
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Копирование большого (больших) файлов в python

JOHN_16
childerolandдля начала, “по сети” означает Windows сеть и сетевые диски?И да никто не запретит вам в таком случае самому открывать файл, блоками читать и писать в другой файл. На счет скорости не знаю. Проверьте сами и отпишитесь
По сети означает (как в предыдущем посте) ОС DOS c NovellNetWare - там хранятся исходные файлы, и есть сторонний сервер под Windows 2003 Server с клиентом под NetWare. Логинимся в NetWare, получаем доступ к сетевым дискам, оттуда копируем базы…
Наверно всяких уточняющих вопросов будет много, я наверняка чего-то упустил в описании. Заранее скажу, использую python 3.3.2
Про открывать, читать и переписывать, конечно, попробую, но я не вижу пока логики, вряд ли такая схема будет быстрее… разве что можно дописывать в результирующие файлы только разницу…

Офлайн

#6 Фев. 4, 2014 15:49:16

childeroland
Зарегистрирован: 2014-02-04
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Копирование большого (больших) файлов в python

JOHN_16
И да никто не запретит вам в таком случае самому открывать файл, блоками читать и писать в другой файл
Опять таки, писал выше, что файл может быть блокирован другим приложением, т.е., не факт, что я смогу получить доступ к файлу в какой-то момент времени, и не факт, что моё соединение с этим файлом не сможет быть прервано (прецеденты уже были).

Что больше всего огорчает, так это то, что винда тот же файл с того же источника копирует в разы быстрее

Офлайн

#7 Фев. 4, 2014 17:22:41

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Копирование большого (больших) файлов в python

Может быть, дело в размере буфера.
Тогда посмотрите http://blogs.blumetech.com/blumetechs-tech-blog/2011/05/faster-python-file-copy.html

Антивирусы, загруженность сети и т.п. общесистемные вещи исключили из списка “подозреваемых”?



Офлайн

#8 Фев. 4, 2014 18:06:53

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Копирование большого (больших) файлов в python

childeroland
винда тот же файл с того же источника копирует в разы быстрее
ну вам доступны любые команды windows
subprocess.call("copy a.dat b.dat",shell=1)

можно использовать:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363851(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363852(v=vs.85).aspx
которую можно вызвать с использованием ctypes.
Более точно можно регулировать доступ к файлу при помощи:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx
но тогда надо самому писать файл. Представляет интерес FILE_FLAG_SEQUENTIAL_SCAN
На той стороне DOS…. вспомнить бы те времена. А как интересно там такие файлы здоровые помещаются?



Отредактировано doza_and (Фев. 4, 2014 18:14:28)

Офлайн

#9 Фев. 4, 2014 21:22:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10016
Репутация: +  857  -
Профиль   Отправить e-mail  

Копирование большого (больших) файлов в python

childeroland
Использую функцию shutil.copy… Есть ли способы увеличить скорость копирования файлов?
копируй внешними средствами, поддерживающими докачку



Офлайн

#10 Фев. 5, 2014 11:15:20

childeroland
Зарегистрирован: 2014-02-04
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Копирование большого (больших) файлов в python

doza_and
На той стороне DOS…. вспомнить бы те времена. А как интересно там такие файлы здоровые помещаются?
Ну, на сколько я знаю, FAT32 позволяет размещать файлы размером до 4ГБ… На счёт команд Windows… Суть в том, что сам скрипт у меня работает и сделать я его как раз хотел на python в рамках изучения языка… А команды Winodws я мог и в батнике использовать… По правде говоря, перед тем как я решил выпендриться и написать программу на совершенно неизвестном мне языке, я как раз делал командный файл, разницы, если честно, по скорости, не заметил… А вот то же копирование, скажем, в FAR'е выполняется быстрее… Не фонтан, но быстрее.
А за совет спасибо, я гляну…

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version