代码之家  ›  专栏  ›  技术社区  ›  Yorian

python async await无法返回元组

  •  0
  • Yorian  · 技术社区  · 6 年前

    我想创建一个从网站异步下载的函数。我需要将下载的结果加入到输入参数中,以便在下载后既可以使用结果,也可以使用参数。

    我目前有以下:

    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)加入到结果中,以便使用它进行进一步的分析?

    1 回复  |  直到 6 年前
        1
  •  2
  •   Yorian    6 年前

    解决方法是:

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