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. ...@@ -90,6 +90,20 @@ subclassed in a limited fashion.
A thread that executes a function after a specified interval has passed. A thread that executes a function after a specified interval has passed.
\end{classdesc*} \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. Detailed interfaces for the objects are documented below.
The design of this module is loosely based on Java's threading model. The design of this module is loosely based on Java's threading model.
......
...@@ -52,6 +52,18 @@ else: ...@@ -52,6 +52,18 @@ else:
def _note(self, *args): def _note(self, *args):
pass 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 # Synchronization classes
...@@ -408,6 +420,14 @@ class Thread(_Verbose): ...@@ -408,6 +420,14 @@ class Thread(_Verbose):
_active_limbo_lock.release() _active_limbo_lock.release()
if __debug__: if __debug__:
self._note("%s.__bootstrap(): thread started", self) 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: try:
self.run() self.run()
except SystemExit: 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