<div dir="ltr"><span style>Hi,</span><div style><br></div><div style>When setting a trace function with settrace, the trace function when called with a new scope can return another trace function or None, indicating the inner scope should not be traced. </div>

<div style>I used settrace for some time but calling the trace function for every line of code is a performance killer.</div><div style>So I moved on to setprofile, which calls a trace function every function entry/exit. now here's the problem: the return value from the trace function is ignored (intentionally), denying the possibility to skip tracing of 'hot' or 'not interesting' code.</div>

<div style> </div><div style>I would like to propose two alternatives:</div><div style>1. setprofile will not ignore the return value and mimic settrace's behavior.</div><div style>2. setprofile is just a wrapper around settrace that limits it's functionality, lets make settrace more flexible so setprofile will be redundant. here's how: settrace will recieve an argument called 'events', the trace function will fire only on events contained in that list. for example: setprofile = partial(settrace, events=['call', 'return']) </div>

<div style><br></div><div style>I personally prefer the second.</div><div style><br></div><div style>Some context to this issue:</div><div style>I'm building a python tracer - a logger that records each and every function call. In order for it to run in production systems, the overhead should be minimal. I would like to allow the user to say which function/module/classes to trace or skip, for example: the user will skip all math/cpu intensive operations. another example: the user will want to trace his django app code but not the django framework.</div>

<div style><br></div><div style>your thoughts?</div><div style><br></div><div style>                  Thanks, Alon Horev</div></div>