¿Cómo puedo escribir asyncio coroutines que opcionalmente actúen como funciones regulares?

Estoy escribiendo una biblioteca que me gustaría que los usuarios finales puedan usar opcionalmente como si sus métodos y funciones no fueran rutinas.

Por ejemplo, dada esta función:

@asyncio.coroutine
def blah_getter():
    return (yield from http_client.get('http://blahblahblah'))

Un usuario final a quien no le importa usar ninguna función asincrónica en su propio código, aún debe importar asyncio y ejecutar esto:

>>> response = asyncio.get_event_loop().run_until_complete(blah_getter())

Sería genial si pudiera, dentro deblah_getter determinar si me llamaban como corutina o no y reaccionar en consecuencia.

Entonces algo como:

@asyncio.coroutine
def blah_getter():
    if magically_determine_if_being_yielded_from():
        return (yield from http_client.get('http://blahblahblah'))
    else:
        el = asyncio.get_event_loop()
        return el.run_until_complete(http_client.get('http://blahblahblah'))

Respuestas a la pregunta(3)

Su respuesta a la pregunta