import functools


def coroutine(func):
    """
    Co-Routine decorator that wraps a function and starts the co-routine
    """
    def start(*args, **kwargs):
        target = func(*args, **kwargs)
        target.send(None)
        functools.update_wrapper(start, func)
        return target
    return start