def _send_tasklet(self, *args): try: t = self._tasklet except AttributeError: t = self._tasklet = greenlet.greenlet(self._tasklet_loop) t.switch() if args: return t.switch((1, greenlet.getcurrent(), args)) else: return t.switch((-1, greenlet.getcurrent(), args))
def switch(self): cur = greenlet.getcurrent() assert cur is not self.greenlet, 'Cannot switch to MAINLOOP from MAINLOOP' switch_out = getattr(cur, 'switch_out', None) if switch_out is not None: try: switch_out() except: traceback.print_exception(*sys.exc_info()) if self.greenlet.dead: self.greenlet = greenlet.greenlet(self.run) try: greenlet.getcurrent().parent = self.greenlet except ValueError: pass return self.greenlet.switch()
def __init__(self, clock=time.time): self.readers = {} self.writers = {} self.excs = {} self.clock = clock self.greenlet = greenlet.greenlet(self.run) self.stopping = False self.running = False self.timers = [] self.next_timers = [] self.observers = {} self.observer_modes = { 'entry': [], 'before_timers': [], 'before_waiting': [], 'after_waiting': [], 'exit': [], }