diff options
-rw-r--r-- | Doc/lib/libthreading.tex | 14 | ||||
-rw-r--r-- | Lib/threading.py | 20 |
2 files changed, 34 insertions, 0 deletions
diff --git a/Doc/lib/libthreading.tex b/Doc/lib/libthreading.tex index 2fe72de..ad48feb 100644 --- a/Doc/lib/libthreading.tex +++ b/Doc/lib/libthreading.tex @@ -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. diff --git a/Lib/threading.py b/Lib/threading.py index 7ec8eff..f48fb6e 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -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: |