[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