python - 以字符串形式获取 aiohttp 结果
问题描述
我正在尝试在 python 中使用异步从网站获取数据。作为示例,我使用了此代码(在 A Better Coroutine Example 下):https ://www.blog.pythonlibrary.org/2016/07/26/python-3-an-intro-to-asyncio/
现在这工作正常,但它将二进制块写入文件,我不希望它在文件中。我想要直接得到的数据。但我目前有一个协程对象列表,我无法从中获取数据。
编码:
# -*- coding: utf-8 -*-
import aiohttp
import asyncio
import async_timeout
async def fetch(session, url):
with async_timeout.timeout(10):
async with session.get(url) as response:
return await response.text()
async def main(loop, urls):
async with aiohttp.ClientSession(loop=loop) as session:
tasks = [fetch(session, url) for url in urls]
await asyncio.gather(*tasks)
return tasks
# time normal way of retrieval
if __name__ == '__main__':
urls = [a list of urls..]
loop = asyncio.get_event_loop()
details_async = loop.run_until_complete(main(loop, urls))
谢谢
解决方案
问题return tasks
在 的末尾main()
,原始文章中没有。而不是返回协程对象(一旦传递给 就没有用asyncio.gather
),您应该返回由返回的元组asyncio.gather
,其中包含以正确顺序运行协程的结果。例如:
async def main(loop, urls):
async with aiohttp.ClientSession(loop=loop) as session:
tasks = [fetch(session, url) for url in urls]
results = await asyncio.gather(*tasks)
return results
现在loop.run_until_complete(main(loop, urls))
将以与 URL 相同的顺序返回一个文本元组。
推荐阅读
- react-native - 无法在空对象上获取属性“packageName”
- r - 了解 matchit() 中的“比率”参数
- tensorflow-datasets - 在 .csv 文件中带有相应标签的目录中准备带有 *.jpeg 的 tensorflow 数据集
- mysql - MappedColumnType:当 MySQL 列定义为 Option[String] 时,将 String 转换为 Vector[String] - 可以为空
- python - 将字符串列读入列表
- java - 使用 Java 或 Apache POI 将 XLSX 文件转换为 XLSB
- azure - 通过 ARM 模板在 Azure SQL 服务器上启用漏洞评估
- reactjs - 列表大小更改时如何避免重新安装列表的反应补偿项?
- javascript - 从另一个网站读取 Html 并分析 html 树
- sql - 准确插入 date_from 和 date_to