def run(self, *args, **kwargs):
        """This runs in a greenlet"""
        return_value = self.coro(*args, **kwargs)

        # i don't like this but greenlets are so dodgy i have no other choice
        raise StopIteration(return_value)
def run ( self , * args , ** kwargs ) : return_value = self . coro ( * args , ** kwargs ) raise StopIteration ( return_value )
This runs in a greenlet