ankh
Июнь 22, 2010 05:51:54
Искал по форуму “быстродейсвтие”, “скорость”. Ничего похожего на ответ не нашёл. Если что, извиняюсь за кросспост.
Изучать python только начал. Решил написать утилитку, парсящую текстовый файлик. Однако, прервался на парсинге опций, задавшись вопросом:
Это нормально, что код
# -*- coding: cp1251 -*-
def printCyrillic(argStr):
print unicode(argStr, 'cp1251')
from optparse import OptionParser
parser = OptionParser()
parser.add_option("-i", "--infile", dest="srcFile", default="in.txt", help="data source - FILE [%default]", metavar="FILE")
parser.add_option("-o", "--outfile", dest="dstFile", default="out.txt", help="ouput into FILE [%default]", metavar="FILE")
parser.add_option("-d", "--delimeter", dest="delim", default="|", help="string delimiter [%default]")
parser.add_option("-l", "--maxlength", type="int", dest="maxLen", default=100, help="maximum block length, chars [%default]")
(options, args) = parser.parse_args()
в частности, вывод опций
python split-by-length.py --help
выполняется порядка 13(!) секунд? Если нет, то прошу дать совет, какие настройки (или что в коде) можно исправить для увеличения скорости.
OS: Win XP SP3
Python: 2.6
bw
Июнь 22, 2010 07:11:06
Нет, это не нормально.
А другой код как работает?
При повторном вызове этого, он выполняется быстрее?
Возможно как-то затык происходит при импорте, теоретически, при некоторых условиях.
После установки Python (2.6?, винда?) какие ещё пакеты/утиль ставились?
..bw
ankh
Июнь 22, 2010 09:39:56
>А другой код как работает?
Дописал скриптик - работает столько же времени (но операций-то, конечно, уже больше! к тому же добавилась работа с файлами). Собственно, я так и предполагал, что время теряется на какой-то предварительной питоновской инициализации, а сам скрипт интерпретатор пробегает быстро. Только, в виду незнания платформы, не понимаю, на что именно идёт это время. Это и хочу выяснить.
>При повторном вызове этого, он выполняется быстрее?
Нет. То же самое с дописанным скриптом. Уточню временной диапазон на основе статистики: 11-13 секунд.
>После установки Python (2.6?, винда?) какие ещё пакеты/утиль ставились?
Версия питона и винды указана в стартовом посте (2.6; XP SP3)
На питон ставил Trac со всем причитающимся, модули:
* собственно, trac :-)
* genshi
* babel
* pygments
* easy_install
* mercurial
* tracAccountManager
* tracMercurial
Надеюсь, ничего не пропустил. В администрировании питона, даже на уровне установки пакетов, разбираюсь ещё хуже, чем в разработке на нём. Trac ставил “на ощупь” и по принципу “заработало - и хорошо”.
bw
Июнь 22, 2010 14:11:11
Сделай так:
1. Проверь время работы полностью пустого скрипта. Или как-то так: > python -c “”.
2. С импортом, да хоть с тем же “from optparse import OptionParser”.
Подозрения у меня только easy_install вызывает. Или пакеты, если установлены в zip'ах (если установка выполняется силами easy_install, попробуй ключик -Z). С оперативкой нет проблем? Можешь проверить что винт всё это время делать?
Всё снести (проверить скорость) и поставить заново. Попробовать без easy_install (setuptools/distribute), хотя вещь очень полезная и без неё весьма сложно будет жить.
С виндой давно не работал, но насколько я знаю из-за особенностей ФС и самой ОСь (механизмы кеширования) запуск Python'а в отличии от Linux производится несколько дольше.
..bw
o7412369815963
Июнь 22, 2010 15:04:36
может антивирусник или т.п. делает задержку перед запуском
ankh
Июнь 23, 2010 04:11:32
Хорошие новости: проблема решена. Плохие новости: точно диагностировать её не получилось.
Огромное спасибо bw и o7412369815963 за помощь! И особенно за команду ‘python -c “”’ - она стала основным инструментом тестирования. Выполнялась за те же 11-13 секунд, пока проблема была.
Ниже опишу свои действия и что происходило, вдруг кому пригодится:
* удалил setuptools, trac (были установлены виндовыми пакетами)
- результата не дало
* начал удалять TortoiseHg 1.0 - на этапе “gathering information…”. Uninstaller стал работь ооочень медленно (один сегмент прогрессБара в 5-10 секунд). При этом я заметил сетевую активность и отключил ЛАН соединение.
- во-первых, тут же удаление значительно ускорилось; и во-вторых - ‘python -c “”’ сработал за 2 неполных секунды! т.е. проблема решилась.
* (на данном этапе я решил, что затык был в TortoiseHg 1.0) включил ЛАН, установил снова TortoiseHg
- проблема не повторилась - тест по-прежнему выполнялся быстро
* (установщик TortoiseHg потребовал перезагрузку) ребут
- при загрузке винда выдала, что установлены апдейты. Как итог: TortoiseHg 1.0 вновь стоит, проблемы нет.
Так что 2 основных рабочих версии таковы:
* TortoiseHg 1.0,
* апдейт винды, который встал и неявно требовал перезагрузки.
Дело, как выяснилось, было не в питоне, а в окружении.
bw
Июнь 23, 2010 05:46:06
> сработал за 2 неполных секунды! т.е. проблема решилась.
~$ time python -c “”
real 0m0.054s
user 0m0.028s
sys 0m0.017s
~$
:-) Хотя это уже особенности системы.
..bw
o7412369815963
Июнь 23, 2010 10:09:00
2сек - это медленно, все равно что-то не так.
$ time python -c “”
real 0m0.015s
user 0m0.012s
sys 0m0.004s
ankh
Июнь 24, 2010 01:38:59
Если строго, то да - неполную секунду:
C:\docs>python_time.bat
C:\docs>echo 9:32:40,53
9:32:40,53
C:\docs>python -c ""
C:\docs>echo 9:32:41,50
9:32:41,50
М-да, помедленней, чем в Линухе *место для холивора* :-)
А в прошлый раз я “на глаз” прикинул, техника - точнее. ;-)
o7412369815963
Июнь 24, 2010 09:01:21
ankh
Если строго, то да - неполную секунду:
C:\docs>python_time.bat
C:\docs>echo 9:32:40,53
9:32:40,53
C:\docs>python -c ""
C:\docs>echo 9:32:41,50
9:32:41,50
М-да, помедленней, чем в Линухе *место для холивора* :-)
А в прошлый раз я “на глаз” прикинул, техника - точнее. ;-)
никакого холивара, вот у меня на винХР под виртуалкой
C:\>echo 12:02:16,67
12:02:16,67
C:\>python -c ""
C:\>echo 12:02:16,68
12:02:16,68
затрачено 0,01 сек.