Search code examples
pythonasync-awaitpython-3.4python-3.5python-asyncio

Where is Python's coroutine type defined?


I'm working on Python 3.5.1 and I want to be able to tell if a function has returned as coroutine object but I cannot find where the coroutine type is defined, instead as of late I've been using the below snippet to get the type through instantiating a coroutine with a function.

async def _f():
    pass
COROUTINE_TYPE = type(_f())

There's got to be a better way to do this, my question is where is this type defined so I can use it directly?


Solution

  • Probably the best way to access the coroutine type is through the types module:

    import types
    
    types.CoroutineType  # here it is
    

    That's not actually where the coroutine type is defined - types.py does pretty much the same thing you're doing to get at it - but it's the standard Python-level way to access the type.

    If you want to see the actual definition of the type, that's in Include/genobject.h and Objects/genobject.c. Look for the parts that say PyCoroWhatever or coro_whatever.