Garbage collector and threads
nid_oizo at yahoo.com_remove_the_
Mon Mar 1 20:23:35 CET 2004
> As Michael Hudson said, it doesn't work that way in Python, because all
> Python objects are global (and I mean truly global here, not just module
> global). Essentially, all objects are heap objects that can be traced
> by crawling through Python's internals.
I understand that. RAII is often used when speaking of scoped
variables. In my case I was talking about global scope in main thread.
> Right. As I said, you have to use the ``thread`` module directly; you
> can't use ``threading``.
But even if I use "thread", I have no way to put the functionality in
one class if I want access the members in the running thread.
>>I just want a way to garantee that all my threads are cancelled when the
>>main thread is finished.
> So hold references to them and call the ``cancel()`` method yourself.
That's a possible solution. Make a custom Thread class with a cancel
method and with all instances registered somewhere. At the end of the
main thread, I call something to cancel all these threads. There's
however some problems with that solution:
- Parent threads need to be cancelled before their children threads.
- It only works at the end of the main thread; it cannot be used at the
middle of an appplication.
- The cancellations are not automatic (I guess there's a way to do it by
overriding something like exit, anyway...)
All these problems are solved by using RAII with the Canceller class I
shown in a previous message, so I prefer using this solution. In fact,
what I would really need, is a mechanism, and I don't know if there's
already one, to disable ref-counting of a thread object in its
corresponding thread, so that I could provide a single class for
More information about the Python-list