Ich habe einige Ctypes Bindings, und für jeden Körper.New sollte ich Body.Free nennen. Die Bibliothek, die ich bin, hat keine Zuweisungsroutinen, die vom Rest des Codes isoliert sind (sie können überall dort aufgerufen werden), und um einige nützliche Funktionen zu verwenden, die ich brauche, um zyklische Referenzen zu erstellen.Wie sauber in Python zuverlässig zu bereinigen?
Ich denke, es würde lösen, wenn ich eine zuverlässige Möglichkeit finden würde, Destruktor an ein Objekt zu haken. (Weakrefs würde helfen, wenn sie mir den Rückruf geben würde nur vor die Daten fallen gelassen wird
So offensichtlich diesen Code megafails, wenn ich in velocity_func setzen.
class Body(object):
def __init__(self, mass, inertia):
self._body = body.New(mass, inertia)
def __del__(self):
print '__del__ %r' % self
if body:
body.Free(self._body)
...
def set_velocity_func(self, func):
self._body.contents.velocity_func = ctypes_wrapping(func)
Ich habe auch versucht, es zu lösen durch weakrefs, mit denen die Dinge scheinen immer nur noch schlimmer, nur nur weitgehend unvorhersehbare
Auch wenn ich nicht in der velocity_func setzen Sie, wird es Zyklen zumindest erscheint dann, wenn ich dies tun.
class Toy(object):
def __init__(self, body):
self.body.owner = self
...
def collision(a, b, contacts):
whatever(a.body.owner)
Wie also sicherstellen, dass Strukturen Müll gesammelt werden, auch wenn sie von der gemeinsam genutzten Bibliothek freigegeben/freigegeben werden?
Es Repository ist, wenn Sie über weitere Details interessiert sind: http://bitbucket.org/cheery/ctypes-chipmunk/
Sehen Sie diese Frage: [http://stackoverflow.com/questions/865115/how-do-i-correctly-clean-up-a-python-object/865272#865272](http://stackoverflow .com/questions/865115/how-do-i-richtig-reinigungs-a-python-objekt/865272 # 865272) –