memory usage
Batista, Facundo
FBatista at uniFON.com.ar
Tue May 6 10:45:56 EDT 2003
It could be very useful if you include in the mail your hardware/software
configuration.
. Facundo
#- -----Mensaje original-----
#- De: Nagy Gabor [mailto:linux42 at freemail.c3.hu]
#- Enviado el: Martes 6 de Mayo de 2003 10:21 AM
#- Para: Python
#- Asunto: memory usage
#-
#-
#- I wrote a simple datafile parser, and it is quite memory
#- hungry, and I
#- don't know if this is what I should expect, or is there a
#- bug in my code.
#-
#- I can profile the CPU time spent here and there, but I have
#- no information
#- about the memory used meanwhile, nor about the time spent
#- handling this
#- memory.
#-
#- My input file is cleartext, with fixed width fields.
#-
#- My first input to test with was about 18MiB long, about 115k lines.
#- I ran out of physical memory parsing this file, then I
#- cancelled, as the
#- swapping took ages.
#- Then I trimmed the file to 15k lines, about 2,3MiB in size.
#- It took about 250MiB of virtual memory.
#- Is this normal? I hope I don't keep extra copies around to
#- multiple the
#- memory needed.
#-
#- OK, what do I want to keep in memory? Here is some of the code.
#-
#- I have two classes, T, and TD.
#-
#- def Parse():
#- recordset = TD()
#- recordset.Tag = T(Name = 'recordset', Flag=1)
#- recordset.Data = []
#- while 1:
#- record = ParseRecord()
#- recordset.append(record)
#-
#- def ParseRecord():
#- record = TD()
#- record.Tag = T( Value='42', Name = 'record', Class='C', Flag=1)
#- record.Data = ParseFields()
#- return record
#-
#- def ParseFields():
#- fields = []
#- for ...:
#- Data = StringIO.read( length)
#- tmp = TD()
#- tmp.Tag = T(name = 'name')
#- tmp.Data = Data
#- fields.append(tmp)
#- return fields
#-
#- class T:
#- def __init__(self, Value = '', Flag = 0, Name = '', Class = ''):
#- self.Flag = Flag
#- self.Value = Value
#- self.Class = Class
#- self.Name = Name
#-
#- class TD:
#- def __init__(self):
#- self.Tag = T()
#- self.Data = None
#-
#- That's all. Storing the whole text file in the Data
#- attributes of TDs is
#- OK. But what is the remaining 247MiB?
#- T.Value is two characters,
#- T.Name is about 5-25 characters
#- T.Class is always 'C'
#-
#- Parse was called once, took 190s cumtime
#- ParseRecord was called 15000 times, 186s cumtime
#- ParseFields was called 14999 times, 176s cumtime
#- T.__init__ was called 599901 times, 16.5s cumtime
#- TD.__init__ was called 599901 times, 76.8s cumtime
#-
#- I don't understand why TD.__init__ took 76.8s, (doing almost
#- nothing), and
#- I don't understand what my memory was used for.
#-
#- Can someone please explain what goes on, when I pass around
#- objects, etc.
#- What is the (memory) overhead of having a list, an instance
#- of a class, a
#- string, etc.
#-
#- Regards, Gee
#-
#- --
#- http://mail.python.org/mailman/listinfo/python-list
#-
More information about the Python-list
mailing list