vedufa
vedufa

Reputation: 143

RuntimeWarning: coroutine 'main' was never awaited

I'm trying to parse and put JSON async but getting:

RuntimeWarning: coroutine 'main' was never awaited

import asyncio
import aiohttp

async def get_put_content(url_get, url_put, session):
    async with session.get(url_get) as response:
        data = await response.read()

    async with session.put(url_put, data=data) as response:
        print(response.status)     

async def main():
    async with aiohttp.ClientSession() as session:
        for temp_id in range (1, 100):
            api_url = "https://api.link" + str(temp_id)
            bd_url = "http://127.0.0.1:5984/photosget/" + str(temp_id)
            asyncio.create_task(get_put_content(api_url, bd_url, session))

        asyncio.wait(get_put_content)

if __name__ == '__main__':
    main()

How I could use async correctly?

Upvotes: 14

Views: 34206

Answers (1)

josoler
josoler

Reputation: 1423

As stated in the error message, you have to await for your main function as it is asynchronous. Borrowed from the Python3.7 documentation section about coroutines

Note that simply calling a coroutine will not schedule it to be executed

Given the fact that you want to run your toplevel entrypoint, in Python 3.7+ you should use

if __name__ == "__main__":
    asyncio.run(main())

For earlier versions you have to handle the event loop yourself:

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

Upvotes: 27

Related Questions