Форум сайта python.su
Искал по форуму “быстродейсвтие”, “скорость”. Ничего похожего на ответ не нашёл. Если что, извиняюсь за кросспост.
Изучать 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
Отредактировано (Июнь 22, 2010 09:40:58)
Офлайн
Нет, это не нормально.
А другой код как работает?
При повторном вызове этого, он выполняется быстрее?
Возможно как-то затык происходит при импорте, теоретически, при некоторых условиях.
После установки Python (2.6?, винда?) какие ещё пакеты/утиль ставились?
..bw
Офлайн
>А другой код как работает?
Дописал скриптик - работает столько же времени (но операций-то, конечно, уже больше! к тому же добавилась работа с файлами). Собственно, я так и предполагал, что время теряется на какой-то предварительной питоновской инициализации, а сам скрипт интерпретатор пробегает быстро. Только, в виду незнания платформы, не понимаю, на что именно идёт это время. Это и хочу выяснить.
>При повторном вызове этого, он выполняется быстрее?
Нет. То же самое с дописанным скриптом. Уточню временной диапазон на основе статистики: 11-13 секунд.
>После установки Python (2.6?, винда?) какие ещё пакеты/утиль ставились?
Версия питона и винды указана в стартовом посте (2.6; XP SP3)
На питон ставил Trac со всем причитающимся, модули:
* собственно, trac :-)
* genshi
* babel
* pygments
* easy_install
* mercurial
* tracAccountManager
* tracMercurial
Надеюсь, ничего не пропустил. В администрировании питона, даже на уровне установки пакетов, разбираюсь ещё хуже, чем в разработке на нём. Trac ставил “на ощупь” и по принципу “заработало - и хорошо”.
Офлайн
Сделай так:
1. Проверь время работы полностью пустого скрипта. Или как-то так: > python -c “”.
2. С импортом, да хоть с тем же “from optparse import OptionParser”.
Подозрения у меня только easy_install вызывает. Или пакеты, если установлены в zip'ах (если установка выполняется силами easy_install, попробуй ключик -Z). С оперативкой нет проблем? Можешь проверить что винт всё это время делать?
Всё снести (проверить скорость) и поставить заново. Попробовать без easy_install (setuptools/distribute), хотя вещь очень полезная и без неё весьма сложно будет жить.
С виндой давно не работал, но насколько я знаю из-за особенностей ФС и самой ОСь (механизмы кеширования) запуск Python'а в отличии от Linux производится несколько дольше.
..bw
Офлайн
может антивирусник или т.п. делает задержку перед запуском
Офлайн
Хорошие новости: проблема решена. Плохие новости: точно диагностировать её не получилось.
Огромное спасибо 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,
* апдейт винды, который встал и неявно требовал перезагрузки.
Дело, как выяснилось, было не в питоне, а в окружении.
Офлайн
> сработал за 2 неполных секунды! т.е. проблема решилась.
~$ time python -c “”
real 0m0.054s
user 0m0.028s
sys 0m0.017s
~$
:-) Хотя это уже особенности системы.
..bw
Офлайн
2сек - это медленно, все равно что-то не так.
$ time python -c “”
real 0m0.015s
user 0m0.012s
sys 0m0.004s
Офлайн
Если строго, то да - неполную секунду:
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
Офлайн
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
Офлайн