首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用异步和multiprocess.map获取数据

如何使用异步和multiprocess.map获取数据
EN

Stack Overflow用户
提问于 2019-03-29 14:13:03
回答 1查看 330关注 0票数 2

我正在使用异步获取网页。

但是,速度不是很高。

以下是代码:

代码语言:javascript
复制
async def get_page_url(url, session):
    res = await session.request(method="GET", url=url)
    return await res.text()

async def main_get_page_url(urls):      
    async with ClientSession() as session:
    tasks = [get_page_url(url, session) for province, url in urls]
    result = await asyncio.gather(*tasks)
    return result

if __name__ == '__main__':
    urls = ['http://www.cnn.com', 'http://www.bbc.com']
    loop = asyncio.ProactorEventLoop()
    asyncio.set_event_loop(loop)
    loop = asyncio.get_event_loop()
    df = loop.run_until_complete(main_get_page_url(urls))

我想使用multiprocessing.pool和地图来提高速度。

我已经在网上搜索过了,但找不到任何好方法。

如何修改代码?

还有其他更好的方法吗?

非常感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-29 17:01:11

如果使用更多的进程,您就不会取得任何成果。99%的脚本执行时间需要网络I/O,您已经使用asyncio.gather处理了网络I/O。只有1%的时间需要CPU。优化它已经不值得花费时间和增加代码复杂度。如果事实是,产生多个进程的成本可能反而会减缓您的脚本。

如果您认为您的代码运行得比它慢,那么首先您应该找到一个瓶颈,并尝试优化它。如果没有实际代码、urls和时间度量的完全可复制的示例,您将无法获得更多帮助。

免责声明:

99%的脚本执行时间需要网络I/O。

这是非常粗略的近似,但这是公平的,看看this answer,特别是在它的末尾的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55419327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档