[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