Yo, we have a problem using garbage collection to clean up open database cursors. Our approach is really simple, but doesn't work. :( we have a method( on a SimpleItem object) getCursor: def getCursor(self): """ doc """ if not hasattr(self,'_v_cursor'): from MySQLdb import connect,escape_string db=connect(...) cursor=db.cursor() self._v_cursor=CursorWrapper(cursor) cursor=self._v_cursor.getCursor() return cursor the cursorwrapper is a class that closes the cursor on GC. class CursorWrapper: def __init__(self,cursor): print "created" self.__cursor=cursor def getCursor(self): print "given out" return self.__cursor def __del__(self): self.__cursor.close() del self.__cursor print "deleted" So in theory, the cursor will be closed on GC. In practice however, we get multiple 'created' a lot of 'given out' but no 'deleted' messages in the cucu debugging. After searching the web/zope site the only related thing we could find was a quote from Jim: "old objects don't die, they just fade away' not very useful. So the questions are: 1) why doesn't the __del__ get called on our wrapper ? 2) do we have to resort to closing and opening database cursors every single time we access the RDB ? TIA, Sloot.
participants (1)
-
Romain Slootmaekers