2014-07-04 16:52 GMT+02:00 Guido van Rossum <[email protected]>: > But wouldn't keeping the traceback (on cancel) be just as detrimental as > keeping the callback/args?
_source_traceback is not a Python traceback object, it's the result of traceback.extract_stack(). I chose this function because it avoids introducing reference cycle. It would be annoying to add reference cycles in debug mode, while the debug mode is usually used to debug tricky issues like reference cycles :-) Storing the traceback as a list has a nice side effect: it's possible to hide "internal" calls to only show the traceback of the user code. For example, async() truncates the traceback to hide the call to Task() constructor. So you only see the call to async(). Storing extract_stack() is maybe more expensive than storing a traceback object, but I don't care of performances in debug mode. I designed the debug mode to be able to call more expensive code (in debug mode) :-) Victor
