[Cython] AddTraceback() slows down generators

mark florisson markflorisson88 at gmail.com
Sat Jan 28 20:48:36 CET 2012

On 28 January 2012 19:41, Vitja Makarov <vitja.makarov at gmail.com> wrote:
> 2012/1/28 Stefan Behnel <stefan_ml at behnel.de>:
>> Stefan Behnel, 27.01.2012 09:02:
>>> any exception *propagation* is
>>> still substantially slower than necessary, and that's a general issue.
>> Here's a general take on a code object cache for exception propagation.
>> https://github.com/scoder/cython/commit/ad18e0208
>> When I raise an exception in test code that propagates through a Python
>> call hierarchy of four functions before being caught, the cache gives me
>> something like a 2x speedup in total. Not bad. When I do the same for cdef
>> functions, it's more like 4-5x.
>> The main idea is to cache the objects in a reallocable C array and bisect
>> into it based on the C code "__LINE__" of the exception, which should be
>> unique enough for a given module.
>> It's a global cache that doesn't limit the lifetime of code objects  (well,
>> up to the lifetime of the module, obviously). I don't know if that's a
>> problem because the number of code objects is only bounded by the number of
>> exception origination points in the C source code, which is usually quite
>> large. However, only a tiny fraction of those will ever raise or propagate
>> an exception in practice, so the real number of cached code objects will be
>> substantially smaller.
>> Maybe thorough test suites with lots of failure testing would notice a
>> difference in memory consumption, even though a single code objects isn't
>> all that large either...
>> What do you think?
> We already have --no-c-in-traceback flag that disables C line numbers
> in traceback.
> What's about enabling it by default?
> --
> vitja.
> _______________________________________________
> cython-devel mailing list
> cython-devel at python.org
> http://mail.python.org/mailman/listinfo/cython-devel

I'm quite attached to that feature actually :), it would be pretty
annoying to disable that flag every time. And what would disabling
that option gain, as the current code still formats the filename and
function name.

More information about the cython-devel mailing list