Why wouldn't the greenlet/thread just exit after it finished?

I just find it rather hard to believe that celery or gunicorn can get into a bad state if one of their subprocesses catches an exception thrown into it and then exits slightly later than expected.

There's a lot of bare excepts in the wild, and it's perfectly normal behavior to catch something, do some cleanup or logging (who knows how long that would take), and reraise, so I would expect these libraries to handle these cases.  I did a lot of code diving and didn't find anything that indicated this wasn't the case.