【问题标题】:RuntimeWarning: coroutine 'main' was never awaitedRuntimeWarning:从未等待协程'main'
【发布时间】:2019-12-15 08:55:09
【问题描述】:

我正在尝试解析 JSON 并将其异步放置,但得到:

RuntimeWarning:从未等待协程“main”

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

如何正确使用异步?

【问题讨论】:

    标签: python


    【解决方案1】:

    如错误消息中所述,您必须等待您的主要功能,因为它是异步的。借自the Python3.7 documentation section about coroutines

    请注意,简单地调用协程不会安排它被执行

    鉴于您想要运行顶级入口点,在 Python 3.7+ 中您应该使用

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

    对于早期版本,您必须自己处理事件循环:

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

    【讨论】:

      猜你喜欢
      • 2020-05-07
      • 2018-10-26
      • 2021-10-22
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 2020-10-10
      相关资源
      最近更新 更多