Auf der Psyco Homepage steht eswas von mehr Speicherplatz Auslastung durch Psyco...
Hab's mal so'n bischen mit dem Benschmark von dookie getestet... Nach dem importieren von Psyco und nach jeder Schleife wird nachgeschaut wieviel Speicher der python-Interpreter verbraucht...
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
Modul: fak_test
Description: Teste
Version: V0.1
Copyright: 2003 by Fritz Cizmarov fritz@sol.at
Last modified: 11. Jän. 2005
License: Free
"""
from time import time
from sys import argv, version_info
from operator import mul
import os
def getPythonSize():
txt = os.popen('tasklist /FI "IMAGENAME eq pythonw.exe"').read()
txt = txt.split("\n")[-2]
KBstr = txt.split(" ")[-2]
KBstr = KBstr.replace(".","")
KBint = int(KBstr)
return KBint
KB1 = getPythonSize()
if len(argv) > 1 and argv[1] == "psyco":
import psyco
psyco.full()
print "import Psyco"
KB2 = getPythonSize()
print "vorher: %dKB nacher: %dKB differenz: %dKB" % ( KB1,KB2, KB2-KB1 )
if version_info[:2] < (2,2):
raise SystemError("need at least Version 2.2 of Python")
def fak_recursive(n):
if n > 2:
return n * fak_recursive(n-1)
else:
return n
def fak_iter_while(n):
res = n
while n > 2:
n -= 1 # entspricht n = n - 1
res *= n # ginge auch als res = res * n
return res
def fak_iter_for(n):
res = n
for n in xrange(2,n):
res *= n
return res
fak_lambda = lambda n: reduce(mul, xrange(2,n),n)
num = 100000
msg = "%16s: %d Berechnungen brauchen %.2f sekunden"
def test(funktion_name, f):
values = range(1,101)*(num/100)
t_start = time()
for val in values:
tmp = f(val)
t_end = time()
print msg % (funktion_name, num, (t_end-t_start))
test("fak_recursive", fak_recursive)
KB2 = getPythonSize()
print "vorher: %dKB nacher: %dKB differenz: %dKB" % ( KB1,KB2, KB2-KB1 )
test("fak_iter_while", fak_iter_while)
KB2 = getPythonSize()
print "vorher: %dKB nacher: %dKB differenz: %dKB" % ( KB1,KB2, KB2-KB1 )
test("fak_iter_for", fak_iter_for)
KB2 = getPythonSize()
print "vorher: %dKB nacher: %dKB differenz: %dKB" % ( KB1,KB2, KB2-KB1 )
test("fak_lambda", fak_lambda)
KB2 = getPythonSize()
print "vorher: %dKB nacher: %dKB differenz: %dKB" % ( KB1,KB2, KB2-KB1 )
Code: Alles auswählen
import Psyco
vorher: 3332KB nacher: 3632KB differenz: 300KB
fak_recursive: 100000 Berechnungen brauchen 1.14 sekunden
vorher: 3332KB nacher: 3672KB differenz: 340KB
fak_iter_while: 100000 Berechnungen brauchen 1.06 sekunden
vorher: 3332KB nacher: 3676KB differenz: 344KB
fak_iter_for: 100000 Berechnungen brauchen 1.00 sekunden
vorher: 3332KB nacher: 3684KB differenz: 352KB
fak_lambda: 100000 Berechnungen brauchen 1.69 sekunden
vorher: 3332KB nacher: 3692KB differenz: 360KB
Ohne Psyco:
Code: Alles auswählen
vorher: 3324KB nacher: 3328KB differenz: 4KB
fak_recursive: 100000 Berechnungen brauchen 3.45 sekunden
vorher: 3324KB nacher: 3372KB differenz: 48KB
fak_iter_while: 100000 Berechnungen brauchen 2.58 sekunden
vorher: 3324KB nacher: 3372KB differenz: 48KB
fak_iter_for: 100000 Berechnungen brauchen 1.89 sekunden
vorher: 3324KB nacher: 3372KB differenz: 48KB
fak_lambda: 100000 Berechnungen brauchen 1.72 sekunden
vorher: 3324KB nacher: 3372KB differenz: 48KB
Also 300KB gehen schon mal alleine für den import von psyco drauf... Zu sehen ist auch, das mit psyco der Speicher langsam voller wird als ohne... Ob da der Garbage Collector von psyco beeinflusst wird?