def getInit(class_name): """动态加载模块""" resultmodule = __import__(class_name, globals(), locals(), [class_name]) resultclass = getattr(resultmodule, class_name) return resultclass() import threading, time class b: def __init__(self, *args, **kwargs): self.name = "b" self.class_name = "a" print "%s is inited" % (self.name) def __del__(self): print "%s is deleted" % (self.name) def other_run(self, obj=None): if obj: obj.run() def run(self, *args, **kwargs): obj = getInit(self.class_name) obj.run() self.other_run(obj) print "%s is run" % (self.name) def treading(): n = 0 c = b() while n<2: n += 1 print "\n" print "start" c.run() print "end" print "\n" if __name__ == '__main__': param = {} th = threading.Thread(target = treading, args = ()) th.start() exit()
b is inited start a is inited a is run a is run b is run a is deleted end start a is inited a is run a is run b is run a is deleted end b is deleted
ループごとにaをリロードしてメモリを解放します
def getInit(class_name): resultmodule = __import__(class_name, globals(), locals(), [class_name]) resultclass = getattr(resultmodule, class_name) return resultclass() import threading, time import a class b: def __init__(self, *args, **kwargs): self.name = "b" self.class_name = "a" self.obj = getInit(self.class_name) print "%s is inited" % (self.name) def __del__(self): print "%s is deleted" % (self.name) def other_run(self): if self.obj: self.obj.run() def run(self, *args, **kwargs): self.obj.run() self.other_run() print "%s is run" % (self.name) def treading(): n = 0 c = b() while n<2: n += 1 print "\n" print "start" c.run() print "end" print "\n" if __name__ == '__main__': param = {} th = threading.Thread(target = treading, args = ()) th.start() exit()
a is inited b is inited start a is run a is run b is run end start a is run a is run b is run end b is deleted a is deleted
Aは終了後にのみ解放されます
ポインタに従ってメモリが解放されます