20

I'm trying python coroutine programming using asyncio. This is my code.

import asyncio

async def coro_function():
    return 2 + 2

async def get():
    return await coro_function()

print(asyncio.iscoroutinefunction(get))

loop = asyncio.get_event_loop()
a1 = loop.create_task(get)
loop.run_until_complete(a1)

But when I execute it, it gives me error

True
Traceback (most recent call last):
  File "a.py", line 13, in <module>
    a1 = loop.create_task(get)
  File "/home/alie/anaconda3/lib/python3.7/asyncio/base_events.py", line 405, in create_task
    task = tasks.Task(coro, loop=self)
TypeError: a coroutine was expected, got <function get at 0x7fe1280b6c80>

How to solve it?

2 Answers 2

30

You're passing in the function get.

In order to pass in a coroutine, pass in get().

a1 = loop.create_task(get())
loop.run_until_complete(a1)

Take a look at the types:

>>> type(get)
<class 'function'>
>>> print(type(get()))
<class 'coroutine'>

get is a coroutine function, i.e. a function that returns a coroutine object, get(). For more information and a better understanding of the fundamentals, take a look at the docs.

Sign up to request clarification or add additional context in comments.

1 Comment

Thanks a lot. Didn't realize python was expecting a call to the function, rather than just the function object itself.
1

Here is an example of code that can help you:

import asyncio

sync def coro_function():
        return 2 + 2

def async execute():
    async with asyncio.TaskGroup() as group:
         group.create_task(coro_function())
    
asyncio.run(execute())
    

1 Comment

please read [ How do I write a good answer](stackoverflow.com/help/how-to-answer)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.