LINUX.ORG.RU

python2 vs python3 range

 , ,


0

1

Переписываю один очень старый скрипт для работы с текстом, заметил что python3 медленее работает с поставленной задачей, пример:

python2

string = "!.string"
print(range(len(string))
Выхлоп:
real	0m0,015s
user	0m0,006s
sys	0m0,009s

В примере на python3 я использую еще list(), так как range() в нем (py3) работает абсолютно по другому, так как это замена xrange() в python2, он не возвращает массив.

string = "!.string"
print(list(range(len(string))))
Выхлоп:
real	0m0,024s
user	0m0,021s
sys	0m0,004s

Ну и выхлоп с range без list в python3 (хотя это не правильно в моей ситуации):

real	0m0,064s
user	0m0,057s
sys	0m0,007s

Задача у меня искать по паттерну в файле строку подходящую (aka grep -r «string» file), в больших объемах соответственно цифра увеличивается таких вычислений.

Вопрос: правильно ли оборачивать range в list в python3? Либо можно использовать гораздо быстрое решение?

правильно ли оборачивать range в list в python3?

ЕМНИП в py3 range работает как xrange в py2, так что если нужно делать несколько проходов по результату то это может иметь смысл.

Задача у меня искать по паттерну в файле строку подходящую

наверное надо взять библиотеку подходящую?;-)

AntonI ★★★★
()

Неубедительно.

Если бы было приведено время обработки скажем гигового текстового файла …

anonymous
()
Ответ на: комментарий от noname_user

Если критическую часть пробросить в С, то скорость вырастет. В либе скорее всего это сделано.

Точно были какие то модули для поиска вхождений подстроки в строку по шаблону.

AntonI ★★★★
()
Ответ на: комментарий от anonymous

Да, по крайней мере нужно сделать много заходов в рамках одного скрипта а не один, ну или руками мерять время в скрипте. Непонято сколько из этого времени уходит на запуск (скорее всего основное и уходит)

AntonI ★★★★
()

правильно ли

ты ещё не готов. тебе нужно больше практиковаться, чтобы постичь дзен.

если нужна скорость, то пиши на сишке.

я бы посмотрел на твой скрипт.

anonymous
()

Твое сравнение ничего не показывет. Python3 стартует медленнее, чем python2.

anonymous
()
Ответ на: комментарий от WitcherGeralt

задача достичь хотя бы приблизительной скорости поиска aka «grep -r „string“ ./dir» на python3


естественно греп я никогда не обгоню, но интерес обработки и поиска текста на подобии с потерями скорости (не конской) приемлем.

noname_user ★★★
() автор топика
Последнее исправление: noname_user (всего исправлений: 2)
Ответ на: комментарий от noname_user

да я наброски закину в теч. суток

Ждем результаты анализа.

anonymous
()
Ответ на: комментарий от noname_user

к сожалению или к счастью не приходилось с ним работать толком)

Можно сказать и по другому - «к не счастью и к великому сожалению не приходилось с ним работать толком) никогда»

anonymous
()

логичнее было бы проверять на


[i for i in xrange(len(string))]

и


[i for i in range(len(string))]

ну и нужно не просто командой time проверять, я прямо в коде вычислять дельту между


start = time.time()

# код

end = time.time()

а то так херня выходит. А еще надо делать как минимум прогонов не один раз. В общем-то можешь ничего не делать там одна и та же скорость в среднем.

anonymous
()
Ответ на: комментарий от noname_user

задача достичь хотя бы приблизительной скорости поиска aka «grep -r „string“ ./dir» на python3

А зачем для этого делать print(list(range(len(string))))?

proud_anon ★★★★★
()
Ответ на: комментарий от noname_user

задача достичь хотя бы приблизительной скорости поиска aka «grep -r „string“ ./dir» на python3

Меняй методичку, жертва пропаганды. Ты упрешься в скорость диска и/или файловой системы. Так что можешь не сранвнивать - скорость будет одинакова.

anonymous
()
Ответ на: комментарий от anonymous

Откуда ты знаешь может он себе намапит в память и будет оттуда грепать, это конечно никак не спасет от того, что надо все еще читать с диска, но тут сам понимаешь, так что меняй методичку жертва пропаганды ио баунда.

anonymous
()
Ответ на: комментарий от anonymous

может он себе

Он даже сам себе не сможет, этот сравниватель скорости неизвестно чего.

намапит в память и будет оттуда грепать

То что можно намапить в память, автоматом замапится в буферы/кеши. Не занимайся тройной и более буферизацией. Помножен на ноль

anonymous
()
Ответ на: комментарий от anonymous

Ведь ты понятия не имеешь сколько у него памяти и что он делает возвел себя в нулевую степень и победил. Хотя, первая часть скорее соответствует действительности.

anonymous
()
Ответ на: комментарий от anonymous

Ведь ты понятия не имеешь сколько у него памяти

Конечно же ты, птушник, знаешь.

что он делает

Он сам не знает, что делает.

anonymous
()
Ответ на: комментарий от anonymous

Никто не знает пыль запартная, но никто и не спорит, что он знает что делает, вообще вся эта тема похожа на потуги дошколенка который где-то прочитал жертва пропаганды опасения таких же жертв пропаганды, что range теперь медленнее потому что надо заворачивать в list пропаганда дошколят дошколятам ведь заворачивать надо только если хочешь получить list, а для чего он ему нужен он так и не сказал, да и вообще ничего толкового не сказал…

anonymous
()
Ответ на: комментарий от noname_user

В сторону timeit посмотри, он нормально измерит.

t184256 ★★★★★
()
Ответ на: комментарий от noname_user

На cython обычно осмысленно делать только числодробление, и то для этого numba есть.

Сдается мне, фигню ты там делашь.

t184256 ★★★★★
()
Ответ на: комментарий от noname_user

задача достичь хотя бы приблизительной скорости поиска aka «grep -r „string“ ./dir» на python3

и, написав решениее на cython, ты решишь совсем другую задачу. знать бы зачем.

t184256 ★★★★★
()
Ответ на: комментарий от t184256

моя задача сделать бинарник с удобным и более менее быстрым поиском по патерну в больших файлах, для этого есть греп - да, но задача максимально это упростить и добавить некоторые фичи которые требуются мне и некоторым людям для рутинных задач не только на *nix системах, но и на форточке.

Возможно фигня да, но вроде получается что то и не плохо, готовый линк в этот топик скину на GH реп

noname_user ★★★
() автор топика
Ответ на: комментарий от noname_user

задача максимально это упростить и добавить некоторые фичи которые требуются мне и некоторым людям для рутинных задач не только на *nix системах, но и на форточке.

ag / ripgrep?

t184256 ★★★★★
()

заметил что python3 медленее работает с поставленной задачей, пример

А может ты замерил время запуска интерпретатора, а не выполнения задачи?

slovazap ★★★★★
()

Задача у меня искать по паттерну в файле строку подходящую

чем регулярки не устроили?

eternal_sorrow ★★★★★
()
Ответ на: комментарий от peregrine

а регулярки разве быстрее чем поиск по паттерну при разборе строки?

Это не риторический вопрос, а вопрос для изучения что бы в дальнейшем было проще выполнять разные задачи

noname_user ★★★
() автор топика
Ответ на: комментарий от slovazap

скорее да чем нет, замерял то я не само выполнение задачи кодом, а запуск интерпритатора (виртуальной платформы, кому как удобнее), и последующее выполнение непосредственно кода

noname_user ★★★
() автор топика
Последнее исправление: noname_user (всего исправлений: 2)
Ответ на: комментарий от noname_user

Смотря как написаны, однозначно, регулярки удобнее на порядок, чем возня с разбором строки руками. Пример тестовой строки в студию.

peregrine ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.