crchemist
Дек. 25, 2008 14:44:11
в циклі методи погано викликати, 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))
і приріст відчутний
crchemist
Дек. 25, 2008 14:45:12
psyco справді не допомагає
crchemist
Дек. 25, 2008 14:52:10
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 пришвидшує тільки функції.
nerezus
Дек. 25, 2008 16:11:34
crchemist
тут дело не в КОНКРЕТНОМ скрипте)
Я пример привел примерно из того кода, который будет в проекте.
Естественно там никаких xrange не будет, т.к. в while будут итерации не по счетчику, а уже по смысловым условиям)
В первоначальном то скрипте я как раз xrange и использовал ;) Просто потом под реальность его подогнал немного.
crchemist
Дек. 25, 2008 16:15:51
справа не в тому. подивись на час
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 разів
nerezus
Дек. 25, 2008 16:21:39
> PSYCO ОПТИМІЗУЄ ТІЛЬКИ ФУНКЦІЇ. ЗАПХАЙ СВІЙ КОД В main() і це пришвидшить цей код в 10 разів
хм, проверю сейчас
nerezus
Дек. 25, 2008 16:29:31
THE TIME HAS COME
Вывод: 14с.
Т.е. в 9 раз увеличилась производительность против python без JIT.
Итог(усредненное время):
python: 127
lua 33
python JIT 14
lua JIT 13
Так что не вижу смысла использовать lua, когда есть python, а производительность их одинакова.
crchemist
Дек. 25, 2008 16:37:44
psyco бере десь 35мб памяті, пітон - 2
nerezus
Дек. 25, 2008 17:04:27
> psyco бере десь 35мб памяті, пітон - 2
Хм. А если скрипт будет большим? То пропорционально, или в районе 35 и останется?
crchemist
Дек. 25, 2008 17:11:27
не знаю. не пробував, думаю що не буде збільшуватись