Skip to content

Instantly share code, notes, and snippets.

@hackaugusto
Last active April 29, 2017 16:20
Show Gist options
  • Save hackaugusto/6b9eedc621391d1717efb13ecbc4f7ad to your computer and use it in GitHub Desktop.
Save hackaugusto/6b9eedc621391d1717efb13ecbc4f7ad to your computer and use it in GitHub Desktop.
A quick hack to land inside the stack of a greenlet that trowed a exception
# ---- HACK ----
# this will replace greenlet's Gevent class, for it to work it must
# be pasted before any code uses gevent is imported
import functools
import gevent
def wrap_pm(run):
@functools.wraps(run)
def wrapper(*args, **kwargs):
try:
return run(*args, **kwargs)
except:
import pdb
pdb.post_mortem()
raise
return wrapper
class HubPM(gevent.hub.Hub):
def __init__(self, *args, **kwargs):
super(HubPM, self).__init__(*args, **kwargs)
self.run = wrap_pm(self.run)
class GreenletPM(gevent.greenlet.Greenlet):
def __init__(self, *args, **kwargs):
super(GreenletPM, self).__init__(*args, **kwargs)
if self._run is not None:
self._run = wrap_pm(self._run)
gevent.hub.set_hub(HubPM())
gevent.greenlet.Greenlet = GreenletPM
# ---- HACK ----
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment