def _spawn_n(seconds, func, args, kwargs): hub = hubs.get_hub() if kwargs: g = greenlet.greenlet(_main_wrapper, parent=hub.greenlet) t = hub.schedule_call_global(seconds, g.switch, func, args, kwargs) else: g = greenlet.greenlet(func, parent=hub.greenlet) t = hub.schedule_call_global(seconds, g.switch, *args) return t, g
def __init__(self): assert Hub.state == 0, ('%s hub can only be instantiated once' % type(self).__name__, Hub.state) Hub.state = 1 make_twisted_threadpool_daemonic() # otherwise the program # would hang after the main # greenlet exited g = greenlet.greenlet(self.run) BaseTwistedHub.__init__(self, g)
def call_after_local(seconds, function, *args, **kwargs): warnings.warn( "call_after_local is renamed to spawn_after_local, which" "has the same signature and semantics (plus a bit extra).", DeprecationWarning, stacklevel=2) hub = hubs.get_hub() g = greenlet.greenlet(function, parent=hub.greenlet) t = hub.schedule_call_local(seconds, g.switch, *args, **kwargs) return t
def ensure_greenlet(self): if self.greenlet.dead: # create new greenlet sharing same parent as original new = greenlet.greenlet(self.run, self.greenlet.parent) # need to assign as parent of old greenlet # for those greenlets that are currently # children of the dead hub and may subsequently # exit without further switching to hub. self.greenlet.parent = new self.greenlet = new
def switch(self): assert greenlet.getcurrent() is not self.greenlet, \ "Cannot switch from MAINLOOP to MAINLOOP" 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.listeners = {READ: {}, WRITE: {}} self.secondaries = {READ: {}, WRITE: {}} self.clock = clock self.greenlet = greenlet.greenlet(self.run) self.stopping = False self.running = False self.timers = [] self.next_timers = [] self.lclass = FdListener self.debug_exceptions = True
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: self.squelch_generic_exception(sys.exc_info()) if self.greenlet.dead: self.greenlet = greenlet.greenlet(self.run) try: if self.greenlet.parent is not cur: cur.parent = self.greenlet except ValueError: pass # gets raised if there is a greenlet parent cycle clear_sys_exc_info() return self.greenlet.switch()
def __init__(self, clock=None): self.listeners = {READ: {}, WRITE: {}} self.secondaries = {READ: {}, WRITE: {}} self.closed = [] if clock is None: clock = monotonic.monotonic self.clock = clock self.greenlet = greenlet.greenlet(self.run) self.stopping = False self.running = False self.timers = [] self.next_timers = [] self.lclass = FdListener self.timers_canceled = 0 self.debug_exceptions = True self.debug_blocking = False self.debug_blocking_resolution = 1
def __init__(self, clock=None): self.listeners = ({}, {}) self.secondaries = ({}, {}) self.closed = [] self.lclass = FdListener self.clock = default_clock if clock is None else clock self.timers = [] self.next_timers = [] self.listeners_events = deque() self.event_notifier = orig_threading.Event() self.greenlet = greenlet.greenlet(self.run) self.stopping = False self.running = False self.debug_exceptions = False self.debug_blocking = False self.debug_blocking_resolution = 1 self._old_signal_handler = None self.poll = select.epoll()
def _spawn_n(seconds, func, args, kwargs): hub = hubs.get_hub() g = greenlet.greenlet(func, parent=hub.greenlet) t = hub.schedule_call_global(seconds, g.switch, *args, **kwargs) return t, g
def _spawn_n(seconds, func, args, kwargs): g = greenlet(func, parent=active_hub.inst.greenlet) return active_hub.inst.schedule_call_global(seconds, g.switch, *args, **kwargs), g