[python] Podivné chování

Jan Fuchs fuky na sunstel.asu.cas.cz
Středa Srpen 26 01:45:01 CEST 2009


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 *
**************************************************************/


Další informace o konferenci Python