2 Support for using stackless python. Broken and riddled with print statements
3 at the moment. Please fix it!
13 tasklet_to_greenlet = {}
17 return tasklet_to_greenlet[stackless.getcurrent()]
20 class FirstSwitch(object):
21 def __init__(self, gr):
24 def __call__(self, *args, **kw):
25 # print("first call", args, kw)
28 run, gr.run = gr.run, None
29 t = stackless.tasklet(run)
31 tasklet_to_greenlet[t] = gr
36 class greenlet(object):
37 def __init__(self, run=None, parent=None):
46 self.switch = FirstSwitch(self)
48 def switch(self, *args):
49 # print("switch", args)
51 caller = stackless.getcurrent()
52 coro_args[self] = args
55 if caller is not self.t:
57 rval = coro_args[self]
64 return self.run is None and not self.dead
67 class GreenletExit(Exception):
72 module = types.ModuleType('greenlet')
73 sys.modules['greenlet'] = module
74 module.greenlet = greenlet
75 module.getcurrent = getcurrent
76 module.GreenletExit = GreenletExit
78 caller = stackless.getcurrent()
79 tasklet_to_greenlet[caller] = None
80 main_coro = greenlet()
81 tasklet_to_greenlet[caller] = main_coro
83 del main_coro.switch # It's already running
84 coro_args[main_coro] = None