Commit bfccb35b authored by Jeremy Hylton's avatar Jeremy Hylton

Add settrace() and setprofile() functions to the threading library.

parent c98ccfd2
......@@ -90,6 +90,20 @@ subclassed in a limited fashion.
A thread that executes a function after a specified interval has passed.
\end{classdesc*}
\begin{funcdesc}{settrace}{func}
Set a trace function \index{trace function} for all threads started
from the \module{threading} module. The \var{func} will be passed to
\cfuntion{sys.settrace} for each thread, before its \method{run}
method is called.
\end{funcdesc}
\begin{funcdesc}{setprofile}{func}
Set a profile function \index{profile function} for all threads started
from the \module{threading} module. The \var{func} will be passed to
\cfuntion{sys.setprofile} for each thread, before its \method{run}
method is called.
\end{funcdesc}
Detailed interfaces for the objects are documented below.
The design of this module is loosely based on Java's threading model.
......
......@@ -52,6 +52,18 @@ else:
def _note(self, *args):
pass
# Support for profile and trace hooks
_profile_hook = None
_trace_hook = None
def setprofile(func):
global _profile_hook
_profile_hook = func
def settrace(func):
global _trace_hook
_trace_hook = func
# Synchronization classes
......@@ -408,6 +420,14 @@ class Thread(_Verbose):
_active_limbo_lock.release()
if __debug__:
self._note("%s.__bootstrap(): thread started", self)
if _trace_hook:
self._note("%s.__bootstrap(): registering trace hook", self)
_sys.settrace(_trace_hook)
if _profile_hook:
self._note("%s.__bootstrap(): registering profile hook", self)
_sys.setprofile(_profile_hook)
try:
self.run()
except SystemExit:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment