我正在使用异步获取网页。
但是,速度不是很高。
以下是代码:
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和地图来提高速度。
我已经在网上搜索过了,但找不到任何好方法。
如何修改代码?
还有其他更好的方法吗?
非常感谢
发布于 2019-03-29 17:01:11
如果使用更多的进程,您就不会取得任何成果。99%的脚本执行时间需要网络I/O,您已经使用asyncio.gather处理了网络I/O。只有1%的时间需要CPU。优化它已经不值得花费时间和增加代码复杂度。如果事实是,产生多个进程的成本可能反而会减缓您的脚本。
如果您认为您的代码运行得比它慢,那么首先您应该找到一个瓶颈,并尝试优化它。如果没有实际代码、urls和时间度量的完全可复制的示例,您将无法获得更多帮助。
免责声明:
99%的脚本执行时间需要网络I/O。
这是非常粗略的近似,但这是公平的,看看this answer,特别是在它的末尾的结果。
https://stackoverflow.com/questions/55419327
复制相似问题