def throw(self, task, *args):
        if not task.alive: return #this is what stackless does
        
        assert task.blocked or task in self._runnable

        task.greenlet.parent = self._runnable[0].greenlet
        if task.blocked:
            self._runnable.appendleft(task)
        else:
            self._runnable.remove(task)
            self._runnable.appendleft(task)

        task.greenlet.throw(*args)
dataset/ETHPy150Open concurrence/concurrence/lib/concurrence/_stackless.py/scheduler.throw/original