Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.6k views
in Technique[技术] by (71.8m points)

python - 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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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())

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...