Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 25, 2019 15:03:28

rvkstudent
Зарегистрирован: 2019-04-25
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Время выполнения скрипта

Всем привет.
Такая проблема есть скрипт (тестовый)

 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 - нет? Проблема в том, что я в этом случае точно не знаю в конечном итоге нормально выполняются скрипты или медленно.
Пробовал ставить разные интерпретаторы и второй версии и третьей - все одно и тоже, отличия есть, но не существенные.

Отредактировано rvkstudent (Апрель 25, 2019 15:38:26)

Офлайн

#2 Апрель 26, 2019 10:48:53

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

Время выполнения скрипта

Я не знаю точного и аргументированного ответа.
Могу предположить, что все дело в том как работает менеджер памяти в конкретной ОС. Ведь этот скрипт по сути это 99% работа с выделением памяти. Питон для Windows, Linux и MacOs это на самом деле разные интерпретаторы (с поправкой что все Unix подобные системы гораздо ближе друг к другу, чем Windows и вероятнее всего интерпретатор меньше отличается) и по разному работают с ОС, так как разные системные вызовы.
Возможно в Windows данный код работает менее эффективно.



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

Офлайн

#3 Апрель 26, 2019 11:36:51

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Время выполнения скрипта

Не один ты такое заметил. Вот тут недавно про похожую ситуацию писали: http://python.su/forum/topic/36769/
Альтернативная ОС хуже оптимизирована чем linux. Обычно это не заметно, но когда у тебя цикл в котором 100500 итераций, то эта не оптимизированность проявляется.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Апрель 26, 2019 11:37:24)

Офлайн

#4 Апрель 26, 2019 15:18:55

rvkstudent
Зарегистрирован: 2019-04-25
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Время выполнения скрипта

Я тоже пришел к такому выводу, что интерпретатор для Win и Linux может чем-то отличаться (например, реализацией операнда “+”) для работы со строками, или еще чем-то. На самом деле в рекомендациях по быстродействию сказано, что нельзя использовать плюс для конкатенации большого количества строк. Просто в дальнейшем все участки кода что-ли проверять на подобные казусы.
P.S. Зато железо новое купил )))

Отредактировано rvkstudent (Апрель 26, 2019 15:19:47)

Офлайн

#5 Апрель 26, 2019 20:26:57

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

Время выполнения скрипта

rvkstudent
Просто в дальнейшем все участки кода что-ли проверять на подобные казусы.
Это не казус, это плохой код.
Код
 s="insert into ....face_unit"
ss=s*45000
Выполняется мгновенно и на win и на linux.
И да, плохой код надо искать и удалять по возможности, а лучше его и не писать с самого начала.



Офлайн

#6 Апрель 28, 2019 17:49:58

DamMercul
Зарегистрирован: 2017-11-26
Сообщения: 325
Репутация: +  13  -
Профиль   Отправить e-mail  

Время выполнения скрипта

Также разница может быть в нагруженности системы, у Windows есть такой фетиш - выделять очень много памяти по первому требованию. Один только браузер настолько неэкономно тратит ресурсы - мама не горюй. В linux все обстоит гораздо лучше, а запросы к БД - только трата памяти и много системных вызовов. Разница может быть и в оптимизированности самих интерпретаторов на разных системах.



____________________________________________________

 # Life loop
while alive:
    if (fun > boredom) and money:
        pass_day(fun, boredom, money)
        continue
    else: break

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version