def _run_actors_greenlet(self, dt, _): """ Helper method for run_actors to TODO: What does this do? """ for actor, greenlet in self._greenlets.iteritems(): dt, rerun = greenlet.switch(dt) while rerun: dt, rerun = greenlet.switch(dt) return False
def _run_actors_greenlet(self, delta, _): """ Helper method for running the actors. :param float delta: The amount of time progressed. """ for actor, greenlet in self._greenlets.iteritems(): delta, rerun = greenlet.switch(delta) while rerun: delta, rerun = greenlet.switch(delta) return False
def _(*args, **kwargs): greenlet = GreenletWorker(callable) # switch to the new greenlet result = greenlet.switch(*args, **kwargs) # back to the parent while is_async(result): # keep on switching back to the greenlet if we get a Future try: result = greenlet.switch((yield from result)) except Exception as exc: result = greenlet.throw(exc) return greenlet.switch(result)
def _green_task(self, greenlet, task): # Run in the main greenlet of the event-loop thread while task is not _DONE: # switch to the greenlet to start the task task = greenlet.switch(task) # if an asynchronous result is returned, yield from while is_async(task): try: task = yield from task except Exception as exc: # This call can return an asynchronous component task = greenlet.throw(exc)
def switch(self): switch_out = getattr(getcurrent(), 'switch_out', None) if switch_out is not None: switch_out() return greenlet.switch(self)
def _start(self): try: greenlet = self.greenlet_class(self.handle) greenlet.switch() except: self.hub.handle_error(None, *sys._exc_info())
def _green_task(self, task): # Run in the main greenlet of the evnet-loop thread greenlet = self._available.pop() result = greenlet.switch(task) while isfuture(result): result = greenlet.switch((yield From(result)))
def _adjust_greenlet_count(self): if len(self._greenlets) < self._max_workers: greenlet = GreenletWorker(self._green_run) self._greenlets.add(greenlet) greenlet.switch()