summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Hylton <jeremy@alum.mit.edu>2003-06-29 16:58:41 (GMT)
committerJeremy Hylton <jeremy@alum.mit.edu>2003-06-29 16:58:41 (GMT)
commitbfccb35b58c84ec186bb1e38d028754796b1fbcf (patch)
tree0dab0787577eee7074ce626ffe26801ad1fbb357
parentc98ccfd29f404ccef7c3fd7a7c1cbbb8d024dce7 (diff)
downloadcpython-bfccb35b58c84ec186bb1e38d028754796b1fbcf.zip
cpython-bfccb35b58c84ec186bb1e38d028754796b1fbcf.tar.gz
cpython-bfccb35b58c84ec186bb1e38d028754796b1fbcf.tar.bz2
Add settrace() and setprofile() functions to the threading library.
-rw-r--r--Doc/lib/libthreading.tex14
-rw-r--r--Lib/threading.py20
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: