[python] Podivné chování
Jan Jakubuv
cbboy na matfyz.cz
Středa Srpen 26 11:48:44 CEST 2009
Ahoj,
presne nevim, ale rekl bych ze problem bude v tom, ze python pristupuje k
lokalnim promennym daleko efektivneji nez ke globalnim. Coz jsem se docetl
zde:
http://wiki.python.org/moin/PythonSpeed/PerformanceTips#LocalVariables
Tohle bezi rychle:
class Read():
def __init__(self):
self.data = ""
def run(self):
tmp = ""
while (1):
buffer = sys.stdin.read(1024)
if (buffer == ""):
break
tmp += buffer
self.data = tmp
Nicmene rozdil v rychlosti je skutecne obrovsky..
honza.
On Wed, Aug 26, 2009 at 01:45:01AM +0200, Jan Fuchs wrote:
> Zdravím,
> vytvoříme si libovolný soubor cca 100MB a ten pak předáme na stdin
> následujícímu skriptu:
>
> import sys
>
> data = ""
> while (1):
> buffer = sys.stdin.read(1024)
>
> if (buffer == ""):
> break
>
> data += buffer
>
> $ cat soubor |./read_normal.py
>
> Během okamžiku jsou data načtená do paměti. Pokud ovšem do skriptu
> přidám fci,
> kterou vůbec nevyužívám:
>
> def fce():
> global data
>
> Skript vytíží CPU na maximum a běží mnoho minut. Stejný problém
> nastává při
> použití proměné z instace třídy:
>
> import sys
>
> class Read():
> def __init__(self):
> self.data = ""
>
> def run(self):
> while (1):
> buffer = sys.stdin.read(1024)
>
> if (buffer == ""):
> break
>
> self.data += buffer
>
> r = Read()
> r.run()
>
> Tuší někdo v čem je problém?
>
> S pozdravem Jan Fuchs
>
> --
> /**************************************************************
> * _ Žádný program není bezchybný, dokonalý ani nejlepší, *
> * °v° to samé platí i o lidech a nejen o nich. *
> * /(_)\ -- Jan Fuchs -- *
> * ^ ^ *
> * http://www.fuky.org Jabber: jan.fuchs.cz na gmail.com *
> **************************************************************/
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
--
Heriot-Watt University is a Scottish charity
registered under charity number SC000278.
Další informace o konferenci Python