Set the system's profile function, which allows you to implement a Python source
Set the system's profile function, which allows you to implement a Python source
code profiler in Python. See chapter :ref:`profile` for more information on the
code profiler in Python. See chapter :ref:`profile` for more information on the
Python profiler. The system's profile function is called similarly to the
Python profiler. The system's profile function is called similarly to the
system's trace function (see :func:`settrace`), but it isn't called for each
system's trace function (see :func:`settrace`), but it is called with different events,
executed line of code (only on call and return, but the return event is reported
for example it isn't called for each executed line of code (only on call and return,
even when an exception has been set). The function is thread-specific, but
but the return event is reported even when an exception has been set). The function is
there is no way for the profiler to know about context switches between threads,
thread-specific, but there is no way for the profiler to know about context switches between
so it does not make sense to use this in the presence of multiple threads. Also,
threads, so it does not make sense to use this in the presence of multiple threads. Also,
its return value is not used, so it can simply return ``None``.
its return value is not used, so it can simply return ``None``.
Profile functions should have three arguments: *frame*, *event*, and
*arg*. *frame* is the current stack frame. *event* is a string: ``'call'``,
``'return'``, ``'c_call'``, ``'c_return'``, or ``'c_exception'``. *arg* depends
on the event type.
The events have the following meaning:
``'call'``
A function is called (or some other code block entered). The
profile function is called; *arg* is ``None``.
``'return'``
A function (or other code block) is about to return. The profile
function is called; *arg* is the value that will be returned, or ``None``
if the event is caused by an exception being raised.
``'c_call'``
A C function is about to be called. This may be an extension function or
a built-in. *arg* is the C function object.
``'c_return'``
A C function has returned. *arg* is the C function object.
``'c_exception'``
A C function has raised an exception. *arg* is the C function object.
.. function:: setrecursionlimit(limit)
.. function:: setrecursionlimit(limit)
...
@@ -890,8 +915,8 @@ always available.
...
@@ -890,8 +915,8 @@ always available.
Trace functions should have three arguments: *frame*, *event*, and
Trace functions should have three arguments: *frame*, *event*, and
*arg*. *frame* is the current stack frame. *event* is a string: ``'call'``,
*arg*. *frame* is the current stack frame. *event* is a string: ``'call'``,
``'line'``, ``'return'``, ``'exception'``, ``'c_call'``, ``'c_return'``, or
``'line'``, ``'return'`` or ``'exception'``. *arg* depends on
``'c_exception'``. *arg* depends on the event type.
the event type.
The trace function is invoked (with *event* set to ``'call'``) whenever a new
The trace function is invoked (with *event* set to ``'call'``) whenever a new
local scope is entered; it should return a reference to a local trace
local scope is entered; it should return a reference to a local trace
...
@@ -926,16 +951,6 @@ always available.
...
@@ -926,16 +951,6 @@ always available.
tuple ``(exception, value, traceback)``; the return value specifies the
tuple ``(exception, value, traceback)``; the return value specifies the
new local trace function.
new local trace function.
``'c_call'``
A C function is about to be called. This may be an extension function or
a built-in. *arg* is the C function object.
``'c_return'``
A C function has returned. *arg* is the C function object.
``'c_exception'``
A C function has raised an exception. *arg* is the C function object.
Note that as an exception is propagated down the chain of callers, an
Note that as an exception is propagated down the chain of callers, an
``'exception'`` event is generated at each level.
``'exception'`` event is generated at each level.
...
@@ -1078,4 +1093,3 @@ always available.
...
@@ -1078,4 +1093,3 @@ always available.
.. rubric:: Citations
.. rubric:: Citations
.. [C99] ISO/IEC 9899:1999. "Programming languages -- C." A public draft of this standard is available at http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf\ .
.. [C99] ISO/IEC 9899:1999. "Programming languages -- C." A public draft of this standard is available at http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf\ .