我正在使用 asyncio 获取网页。
但是,速度不是很高。
代码如下:
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 和 map 来提高速度。
我在网上搜索过,没有找到任何好的方法。
如何修改代码?
还有其他更好的方法吗?
非常感谢
请您参考如下方法:
使用更多流程您将一事无成。 99% 的脚本执行时间占用您已经使用 asyncio.gather 处理的网络 I/O。只有 1% 的时间占用 CPU。优化它已经不值得投入时间和增加代码复杂性。事实上,产生多个进程的成本可能反而会减慢您的脚本。
如果您认为您的代码运行速度比实际情况慢,您应该首先找到瓶颈并尝试对其进行优化。如果没有带有实际代码、URL 和时间测量的完全可重现的示例,将无法为您提供更多帮助。
免责声明:
99% of script execution time takes network I/O
这是非常粗略的近似值,但很公平,看看this answer尤其是最后的结果。
