[Twisted-web] memory leak with metaclass

tazzo tazzo at email.it
Mon Jun 27 01:56:35 MDT 2005


Also without metaclass there is a memory leak, returning
instances of rend.Page from locateChild they are never released.
Here a simple example, the function 'do' build on file log
a simple statistic every 5 sec about only instances classes  that are
growing up during page serving.
Try to start the server and ask some page continuosly, you'll see
the number of rendPage grow up with some other classes.

#-------------------------
import nevow
 
instances={}
count=0
def do():
  global count
  import gc
  gc.collect()
  objects=gc.get_objects()
  new={}
  for object in objects:
    try:
      new[str(object.__class__)]=new.setdefault(str(object.__class__),0)+1
    except:
      pass
  show=set()
  for key,value in new.items():
    if key in instances:
      if instances[key][-1]!=value:
        show.add(key)
    else:
      instances[key]=[0]*count
      show.add(key)
    instances[key].append(new[key])
  log=open('log','w')
  for klass,lista in sorted(instances.items()):
    if klass in show:
      print >>log,klass
      print >>log,'\t',lista
  log.close()
  count+=1

import twisted
from twisted.internet.task import LoopingCall
from nevow import appserver


LoopingCall(do).start(5)
 
 
class Controller(nevow.rend.Page):
  def locateChild(self,context,segments):
    page=nevow.rend.Page()
    page.docFactory=nevow.loaders.stan(nevow.tags.h1['I leak memory'])
    return page,[]
 
 
application=twisted.application.service.Application('leaker')
webservice = 
twisted.application.internet.TCPServer(12345,appserver.NevowSite(Controller()))
webservice.setServiceParent(application)
#-------------------------

-- 
La presente comunicazione potrebbe contenere informazioni riservate e/o
protette
da segreto professionale ed e' indirizzata esclusivamente ai destinatari della
medesima qui indicati. Se avete ricevuto per errore la presente comunicazione,
siete invitati a segnalarcelo, rispondendo a questo stesso indirizzo di
e-mail,
e a cancellare il presente messaggio dal Vostro sistema. E' strettamente
proibito
e potrebbe essere fonte di violazione di legge qualsiasi uso, comunicazione,
copia
o diffusione dei contenuti di questa comunicazione da parte di chi la abbia
ricevuta per errore o in violazione degli scopi della presente.
Il messaggio e' stato analizzato alla ricerca di virus o contenuti pericolosi
ed
e' risultato NON infetto.





More information about the Twisted-web mailing list