Найти - Пользователи
Полная версия: Питон и производительность
Начало » Python для экспертов » Питон и производительность
1 2 3
crchemist
в циклі методи погано викликати, 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
psyco справді не допомагає
crchemist
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
crchemist
тут дело не в КОНКРЕТНОМ скрипте)
Я пример привел примерно из того кода, который будет в проекте.
Естественно там никаких xrange не будет, т.к. в while будут итерации не по счетчику, а уже по смысловым условиям)

В первоначальном то скрипте я как раз xrange и использовал ;) Просто потом под реальность его подогнал немного.
crchemist
справа не в тому. подивись на час
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
> PSYCO ОПТИМІЗУЄ ТІЛЬКИ ФУНКЦІЇ. ЗАПХАЙ СВІЙ КОД В main() і це пришвидшить цей код в 10 разів
хм, проверю сейчас
nerezus
THE TIME HAS COME

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


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

Так что не вижу смысла использовать lua, когда есть python, а производительность их одинакова.
crchemist
psyco бере десь 35мб памяті, пітон - 2
nerezus
> psyco бере десь 35мб памяті, пітон - 2

Хм. А если скрипт будет большим? То пропорционально, или в районе 35 и останется?
crchemist
не знаю. не пробував, думаю що не буде збільшуватись
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