[Python-Dev] Re: Useful thread project for 2.5?
Fazal Majid
python-dev at fromemail.com
Sun Mar 6 23:42:03 CET 2005
Tim Peters wrote:
> Florent's DeadlockDebugger in turn builds on an external C threadframe
> module:
>
> http://www.majid.info/mylos/stories/2004/06/10/threadframe.html
>
> Folding the functionality of that (or similar functionality) into the
> core would, IMO, be a valuable addition for 2.5, and would make an
> excellent intro project for an aspiring contributor interested in how
> threads work in CPython (what this module does is conceptually
> simple). It belongs in the core because it's not safe to chase the
> tstate chain without holding pystate.c's internal head_mutex lock
> (holding the GIL isn't enough -- it's normal practice to call
> PyThreadState_Delete() while not holding the GIL).
>
> I'd do it myself (and maybe I will anyway), but this really would make
> a good (finite; conceptually simple) project for someone who wants to
> gain Python developer experience.
Since I started this, I might as well finish it. I do have some Python
developer experience (hey, I even voted for comp.lang.python back
when...) but not in the core interpreter itself.
I suspect integrating this feature (let's call it sys._current_frames()
for the sake of argument, although it probably belongs in the threads
module) in the core is not going to be quite as trivial as you say, as
there are potential memory leaks. If the function returns a dictionary,
it should probably be a weak dict to avoid a circular reference between
the frame of the thread that calls _current_frames and its locals that
contain the returned dictionary. But that would also mean the
references to other threads' frames are going to be weak, thus not
allowing the current thread to inspect their locals and backtraces at
will as those weak references may be broken.
--
Fazal Majid Email: python-dev at fromemail.com
Home: +1 415 359-0918
1111 Jones Apt. 1 Cell: +1 415 244-1337
San Francisco, CA 94109, USA Web: www.majid.info
More information about the Python-Dev
mailing list