Найти - Пользователи
Полная версия: Время выполнения скрипта
Начало » Python для новичков » Время выполнения скрипта
1
rvkstudent
Всем привет.
Такая проблема есть скрипт (тестовый)

 query = ''
for i  in range(45000):
    query = query + "insert into securyties(sec_code, fass_code,code, scale, face_value, lot_size,short_name values insert into securyties(sec_code, face_unit insert into securyties(sec_code, face_unit, class_code,code, scale, face_value, lot_size,short_name values insert into securyties(sec_code, face_unit insert into securyties(sec_code, face_unit, class_code,code, scale, face_value, lot_size,short_name values insert into securyties(sec_code, face_unit"

Выполняется за 22 секунды на Win7 intel i5-2400 cpu 6GB Ram.

C:\Users\kozlov.r\PycharmProjects\my_work>python -m cProfile test2.py
3 function calls in 22.863 seconds

Ordered by: standard name

ncalls tottime percall cumtime percall filename:lineno(function)
1 22.863 22.863 22.863 22.863 test2.py:1(<module>)
1 0.000 0.000 22.863 22.863 {built-in method builtins.exec}
1 0.000 0.000 0.000 0.000 {method ‘disable’ of ‘_lsprof.Profiler’ objects}

На домашнем компе Win10 amd ryzen 5 2600 16GB Ram будет чуть быстрее.
На другом компьютере с ОС Linux и существенно меньшим по производительности железом выполняется за милисекунды.

Вопрос: в чем может быть проблема? 22 секунды для такого скрипта непомерно много.

P.S. Речи об оптимизации самого скрипта не идет - код, который выполнится за милисекунды на Win есть. Речь идет именно о том, почему на двух разных компьютерах с существенно отличающимся по производительности железом скрипт выполняется в одно и тоже чрезмерно долгое время, а на Linux - нет? Проблема в том, что я в этом случае точно не знаю в конечном итоге нормально выполняются скрипты или медленно.
Пробовал ставить разные интерпретаторы и второй версии и третьей - все одно и тоже, отличия есть, но не существенные.

JOHN_16
Я не знаю точного и аргументированного ответа.
Могу предположить, что все дело в том как работает менеджер памяти в конкретной ОС. Ведь этот скрипт по сути это 99% работа с выделением памяти. Питон для Windows, Linux и MacOs это на самом деле разные интерпретаторы (с поправкой что все Unix подобные системы гораздо ближе друг к другу, чем Windows и вероятнее всего интерпретатор меньше отличается) и по разному работают с ОС, так как разные системные вызовы.
Возможно в Windows данный код работает менее эффективно.
Rodegast
Не один ты такое заметил. Вот тут недавно про похожую ситуацию писали: http://python.su/forum/topic/36769/
Альтернативная ОС хуже оптимизирована чем linux. Обычно это не заметно, но когда у тебя цикл в котором 100500 итераций, то эта не оптимизированность проявляется.
rvkstudent
Я тоже пришел к такому выводу, что интерпретатор для Win и Linux может чем-то отличаться (например, реализацией операнда “+”) для работы со строками, или еще чем-то. На самом деле в рекомендациях по быстродействию сказано, что нельзя использовать плюс для конкатенации большого количества строк. Просто в дальнейшем все участки кода что-ли проверять на подобные казусы.
P.S. Зато железо новое купил )))
doza_and
rvkstudent
Просто в дальнейшем все участки кода что-ли проверять на подобные казусы.
Это не казус, это плохой код.
Код
 s="insert into ....face_unit"
ss=s*45000
Выполняется мгновенно и на win и на linux.
И да, плохой код надо искать и удалять по возможности, а лучше его и не писать с самого начала.
DamMercul
Также разница может быть в нагруженности системы, у Windows есть такой фетиш - выделять очень много памяти по первому требованию. Один только браузер настолько неэкономно тратит ресурсы - мама не горюй. В linux все обстоит гораздо лучше, а запросы к БД - только трата памяти и много системных вызовов. Разница может быть и в оптимизированности самих интерпретаторов на разных системах.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB