import stackless import weakref import gc def print_referrers(): t = stackless.current print gc.get_referrers(t) def tasklet_func_catcher(): try: tasklet_func_pitcher() except TaskletExit, e: print "TEXC", e except BaseException, e: print "EXC", e def tasklet_func_pitcher(): print_referrers() i = 0 while 1: print "tasklet_func_pitcher.schedule[%s]" % i v = stackless.schedule() print "tasklet_func_pitcher.scheduled[%s]" % i, v del v i += 1 def wr_callback(*args): print "wr_callback" def create_tasklet(): print "create_tasklet.create" t = stackless.tasklet(tasklet_func_catcher)() print "create_tasklet.pre-run" t.run() t.run() t.run() print "create_tasklet.post-run/pre-remove; runcount=", stackless.runcount wr = weakref.ref(t, wr_callback) t.remove() print "create_tasklet.post-remove; runcount=", stackless.runcount, "wr=", wr return wr ref = create_tasklet() print "gc.get_referrers; pre-collect", ref gc.collect() print "gc.get_referrers; post-collect", ref