[PyQt] Is PyQt really freeing memory?
Albert Cervera i Areny
albert at nan-tic.com
Sun Aug 2 01:12:52 BST 2009
I've been having problems with my application consuming too much memory after
some time running and today decided to take a deeper look. I've ended up with
the attach test.py script which either demonstrates PyQt is not freeing memory
appropiately when signals are involved or I simply don't understand how this
works.
As you can see the script creates lists with 100.000 QObjects and prints the
memory used. As python won't free memory but reuse what has already been freed
I expect a call like:
list = []
fill in the list with lots of data
to take as much memory as:
list = []
fill in the list with lots of data
list = []
fill in the list with the same lots of data
If you give it a try, you'll realize that this is true if you create 100.000
objects with no signal connections. But if you connect and disconnect a
signal for those objects, the memory used after the second fill is larger than
after the first one.
It seems to me that some data is being leaked in connect() and disconnect()
functions (which, by the way, take up a lot of memory).
Here's the output of the script in my system:
$ python test.py one no
Executing 'one' without signals
Memory: 21564
$ python test.py one yes
Executing 'one' with signals
Memory: 64992
$ python test.py two yes
Executing 'two' with signals
Memory: 125592
$ python test.py two+remove yes
Executing 'two+remove' with signals
Memory: 93880
$ python test.py three+remove yes
Executing 'three+remove' with signals
Memory: 122808
So "two+remove yes" should be using 64992 Kb (just like "one yes") but it uses
50% more. The same happens with "three+remove yes", again more 30 Mb!
--
Albert Cervera i Areny
http://www.NaN-tic.com
Mòbil: +34 669 40 40 18
-------------- next part --------------
A non-text attachment was scrubbed...
Name: test.py
Type: text/x-python
Size: 1238 bytes
Desc: not available
Url : http://www.riverbankcomputing.com/pipermail/pyqt/attachments/20090802/8a026bdb/test.py
More information about the PyQt
mailing list