Форум сайта python.su
Всегда думал, что питон очень быстрый(собственно по отношению к перлам и т.д. он в разы быстрее).
Ну понятно, что нативным компилируемым он в полторы сотни раз проигрывает, но это ожидаемо.
Выбираю для игры скриптоывй движок.
Попробовал луа. Ну что ж, с чистым питоном разница в ~10раз, а питон с JIT(psyco) еще 30% теряет.
Есть ли для питона нормальные реализации JIT? (Как сказал выше, тот же psyco сильно(30%) замедляет скрипт и вообще давно не развивается).
Или придется использовать lua?
Офлайн
или рефакторить код;)
показал бы какая задача
Офлайн
psyco прискорює приблизно в разів 10. Код просто переробити треба. http://psyco.sourceforge.net/psycoguide/node29.html
Офлайн
быстрее я думаю не сделать =)
если настолько критично - бери lua c LuaJIT =)
Офлайн
A performance killer is the usage of the built-in functions map and filter. Never use them with Psyco.Може через це код повільніший?
Офлайн
или рефакторить кодЗадача тестовая. Буду писать игру с просчетом всех объектов через скрипт.
показал бы какая задача
psyco прискорює приблизно в разів 10Не знаю, но на простом примере в вызовах методов, циклах и сравнении он показал на 30% худший резултат.
если настолько критично - бери lua c LuaJITС ним и сравнивал. Просто луа в ~3.5 раз быстрее питона без JIT.
Отредактировано (Дек. 25, 2008 14:27:24)
Офлайн
nerezusпокажи код
но на простом примере в вызовах методов, циклах и сравнении он показал на 30% худший резултат.
Офлайн
http://shootout.alioth.debian.org/u64q/
http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=python&lang2=lua
Цікаві лінки
Отредактировано (Дек. 25, 2008 14:29:43)
Офлайн
Base = {}
Base.field = 0
function Base:setField(value)
self.field = value
end
function Base:getField()
return self.field
end
local start = os.time()
local base = {}
setmetatable(base, {__index = Base})
local i = 0
while i < 10000 do
local j = 0
while j < 10000 do
if (i + j) % 2 == 0 then
base:setField(base:getField() + 1)
end
j = j + 1
end
i = i + 1
end
--print(base:getField())
print(os.time() - start)
import time
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()
i = 0
while i < 10000:
j = 0
while j < 10000:
if (i + j) % 2 == 0:
base.setField(base.getField() + 1)
j += 1
i += 1
#print(base.getField())
print int(round(time.time() - start))
#include <iostream>
#include <ctime>
using namespace std;
class Base {
protected:
int field;
public:
Base() {
field = 0;
}
void setField(int value) {
field = value;
}
int getField() {
return field;
}
};
int main() {
Base base;
time_t start = time (NULL);
int i = 0;
while (i < 10000) {
int j = 0;
while (j < 10000) {
if ((i + j) % 2 == 0) {
base.setField(base.getField() + 1);
}
++j;
}
++i;
}
cout << base.getField() << endl;
cout << time(NULL) - start << endl;
return 0;
}
Офлайн
Може через це код повільніший?Нет, без built-in ф-ий делал тестовый скрипт.
Офлайн