If an exception occurs in a task which is not the "main task", the exception is stored in a global variable: _exc_context in core.py. This is then passed to call_exception_handler. The exception contains the full traceback at the point of error - which includes references to multiple objects at the time of the error. These objects cannot then be garbage collected until the next exception occurs and _exc_context is overwritten. In complex programs this can cause large amounts of memory to be used