Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 25, 2008 14:44:11

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

в циклі методи погано викликати, while теж не потрібно використовувати - він зло. Саме цей приклад я переписав так:

import time
#import psyco; psyco.full()

class Base(object):
__slots__ = ('field',)
def __init__(self):
self.field = 0

def setField(self, value):
self.field = value

def getField(self):
return self.field

start = time.time()
base = Base()

set_field = base.setField
get_field = base.getField
for i in xrange(10000):
for j in xrange(10000):
if (i + j) % 2 == 0:
set_field(get_field() + 1)

print int(round(time.time() - start))
і приріст відчутний



Отредактировано (Дек. 25, 2008 14:50:30)

Офлайн

#2 Дек. 25, 2008 14:45:12

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

psyco справді не допомагає



Офлайн

#3 Дек. 25, 2008 14:52:10

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

import time
import psyco; psyco.full()

class Base(object):
def __init__(self):
self.field = 0

def setField(self, value):
self.field = value

def getField(self):
return self.field

start = time.time()

base = Base()

def main():
set_field = base.setField
get_field = base.getField
for i in xrange(10000):
for j in xrange(10000):
if ((i + j) & 1) == 0:
set_field(get_field() + 1)

main()
print int(round(time.time() - start))
Згадав. psyco пришвидшує тільки функції.



Отредактировано (Дек. 25, 2008 14:52:57)

Офлайн

#4 Дек. 25, 2008 16:11:34

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

crchemist
тут дело не в КОНКРЕТНОМ скрипте)
Я пример привел примерно из того кода, который будет в проекте.
Естественно там никаких xrange не будет, т.к. в while будут итерации не по счетчику, а уже по смысловым условиям)

В первоначальном то скрипте я как раз xrange и использовал ;) Просто потом под реальность его подогнал немного.



Офлайн

#5 Дек. 25, 2008 16:15:51

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

справа не в тому. подивись на час

import time
import psyco; psyco.full()

class Base(object):
def __init__(self):
self.field = 0

def setField(self, value):
self.field = value

def getField(self):
return self.field

start = time.time()

base = Base()

def main():
set_field = base.setField
get_field = base.getField
for i in xrange(10000):
for j in xrange(10000):
if ((i + j) & 1) == 0:
set_field(get_field() + 1)

main()
print int(round(time.time() - start))
PSYCO ОПТИМІЗУЄ ТІЛЬКИ ФУНКЦІЇ. ЗАПХАЙ СВІЙ КОД В main() і це пришвидшить цей код в 10 разів



Офлайн

#6 Дек. 25, 2008 16:21:39

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

> PSYCO ОПТИМІЗУЄ ТІЛЬКИ ФУНКЦІЇ. ЗАПХАЙ СВІЙ КОД В main() і це пришвидшить цей код в 10 разів
хм, проверю сейчас



Офлайн

#7 Дек. 25, 2008 16:29:31

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

THE TIME HAS COME

Вывод: 14с.
Т.е. в 9 раз увеличилась производительность против python без JIT.


Итог(усредненное время):
python: 127
lua 33
python JIT 14
lua JIT 13

Так что не вижу смысла использовать lua, когда есть python, а производительность их одинакова.



Офлайн

#8 Дек. 25, 2008 16:37:44

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

psyco бере десь 35мб памяті, пітон - 2



Офлайн

#9 Дек. 25, 2008 17:04:27

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

> psyco бере десь 35мб памяті, пітон - 2

Хм. А если скрипт будет большим? То пропорционально, или в районе 35 и останется?



Офлайн

#10 Дек. 25, 2008 17:11:27

crchemist
От:
Зарегистрирован: 2008-07-09
Сообщения: 379
Репутация: +  0  -
Профиль   Отправить e-mail  

Питон и производительность

не знаю. не пробував, думаю що не буде збільшуватись



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version