<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def run_in_greenlet(callable):
 """Decorator to run a ``callable`` on a new greenlet. A ``callable`` decorated with this decorator returns a coroutine """

    @wraps(callable)
    async def _(*args, **kwargs):
        green = greenlet(callable)
        # switch to the new greenlet
        result = green.switch(*args, **kwargs)
        # back to the parent
        while isawaitable(result):
            # keep on switching back to the greenlet if we get an awaitable
            try:
                result = green.switch((await result))
            except Exception:
                exc_info = sys.exc_info()
                result = green.throw(*exc_info)

        return green.switch(result)

    return _