将 2 个或更多异步 HTTP 调用的结果设置为命名变量

Posted

技术标签:

【中文标题】将 2 个或更多异步 HTTP 调用的结果设置为命名变量【英文标题】:Set result of 2 or more Async HTTP calls into named variables 【发布时间】:2017-01-05 12:46:20 【问题描述】:

我想要实现的是: tasks = [call(url) for url in urls]

call 是 Python3.5 中的 async 方法/coroutine 来执行 GET 请求,比如说aiohttp

所以基本上所有的 call 调用都是异步的。现在我可以运行asyncio.wait(tasks),然后在futures中一一访问结果。

但是,我想要的是,假设只有 2 个 url,然后: a, b = call(url1), call(url2)

就像你在 Koa 中通过产生一个数组来做的那样。如果可以的话,有什么帮助吗??

【问题讨论】:

您希望呼叫同时发生还是顺序发生? @dim 同时 那么你需要使用asyncio.waitasyncio.gather 之类的东西。 是的,我知道,但是怎么做呢?如何将其分配给命名变量而不是未来数组? var1, var2 = loop.run_until_complete(asyncio.gather(task1, task2)) 【参考方案1】:

var1, var2 = loop.run_until_complete(asyncio.gather(task1, task2))

根据文档,gather 保留了它传递的序列的顺序

【讨论】:

以上是关于将 2 个或更多异步 HTTP 调用的结果设置为命名变量的主要内容,如果未能解决你的问题,请参考以下文章

ionic 2,刷新带有 2 个或更多徽标的模态页面

如果存在 2 个或更多相等的结果,则将 select2 建议限制为 1

如何从异步数据中检查多个不等式?

我可以为 2 个或更多应用程序进行 QSettings 设置吗?

如何从 2 个或更多矩阵的所有可能组合中创建矩阵?

PHP 将2个或更多图像合并为一个