[Stackless] Tasklet cleanup?

Richard Tew richard.m.tew at gmail.com
Sun May 20 02:05:57 CEST 2012


On Sun, May 20, 2012 at 10:29 AM, Sylvain Prat <sylvain.prat at gmail.com> wrote:
> I'm wondering how tasklets can clean themselves up when they are
> destroyed due to garbage collection (i.e. when they are not in the
> runnables and not referenced by any object anymore). Greenlet solves
> this problem by raising a GreenletExit exception in the greenlet's run
> function when the greenlet is about to die due to garbage collection.
> However, in stackless, it seems that no TaskletExit exception is
> raised when the tasklet is about to die, so we can't simply use a
> try/finally in the tasklet's callable to clean up resources.

Greenlet is derived from Stackless, so similarly TaskletExit should be
raised on a tasklet that is being garbage collected.

> I tried to wrap my tasklet in a parent object which has the same
> lifespan as my tasklet and has a __del__ function for cleaning up, but
> I keep having problems with circular references (the wrapper/parent
> object also provides the callable of the tasklet, i.e. a bound method)
> that make the tasklet/parent object uncollectable (circular references
> : wrapper --> tasklet --> stackless machinery? --> callable stack
> frame (bound method of wrapper) --> wrapper). Same problem when trying
> to inherit from tasklet.
>
> So, how can I clean up resources in tasklets? (I'm pretty sure I've
> missed something obvious)

I've attached two example scripts where a tasklet dies, but does not
get the TaskletExit raised on it.  This is something Kristjan Valur
has been working on, but there have been upsides and downsides to the
different approaches and as I understand it the ideal solution to
tasklet destruction is yet to be found.

Kristjan, why is TaskletExit not being raised?  Any ideas?

Cheers,
Richard.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tasklet_schedule.py
Type: application/octet-stream
Size: 1177 bytes
Desc: not available
URL: <http://www.stackless.com/pipermail/stackless/attachments/20120520/bf3a79e3/attachment.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: tasklet_channel.py
Type: application/octet-stream
Size: 1293 bytes
Desc: not available
URL: <http://www.stackless.com/pipermail/stackless/attachments/20120520/bf3a79e3/attachment-0001.obj>


More information about the Stackless mailing list