Last active
April 29, 2017 16:20
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ---- 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