【问题标题】:python async await can not return tuplepython async await不能返回元组
【发布时间】:2018-12-18 22:27:32
【问题描述】:

我想创建一个从网站异步下载的功能。我需要将下载的结果加入到输入参数中,这样我就可以同时使用结果以及下载后的参数。

我目前有以下:

async def download(session, url, var1, var2):
    with async_timeout.timeout(10):
        async with session.get(url) as response:
            return await (response.read(), url, var1, var2)

async def loop_download(loop, urls, var1s, var2s):
    async with aiohttp.ClientSession(loop=loop) as session:
        tasks = [download(session, url, var1, var2) for url, var1, var2 in zip(urls, var1s, var2s)]
        results = await asyncio.gather(*tasks)
        return results

loop = asyncio.get_event_loop()
results = loop.run_until_complete(loop_download(loop, urls, var1s, var2s))

然而这会返回一个错误:

TypeError: object tuple can't be used in 'await' expression

如何将一些输入数据(例如 url)加入结果中,以便我可以将其用于进一步分析?

【问题讨论】:

  • return (await response.read(), url, var1, var2) ?或者更好的是,取前一行的值
  • 返回 TypeError: An asyncio.Future, a coroutine or an awaitable is required
  • 这里的 tl;dr 是你可以返回一个元组,但你不能等待一个。

标签: python async-await python-asyncio aiohttp


【解决方案1】:

解决了:

return (await response.read(), url, x, y)

【讨论】:

  • 也可以去掉括号:return await response.read(), url, x, y
猜你喜欢
  • 2020-09-21
  • 2020-07-14
  • 2017-10-21
  • 2019-06-27
  • 2017-09-11
  • 2019-05-30
  • 2021-08-06
  • 1970-01-01
相关资源
最近更新 更多