首页 > 解决方案 > Python 程序在一台机器上运行异步获取任务的速度非常快,但在其他机器上却没有

问题描述

我有一个问题,python 代码在我的 PC 上运行得非常快,而我已经尝试了另外 4 台机器,而且它们都运行相同的代码,但速度较慢。

在我运行代码的 PC 上,它经过 200 个请求并在 3 分钟内返回 200 个响应。这台机器没有什么特别之处。

i5 gen 5 8GB RAM SSD 驱动器

虽然我已经在功能更强大的机器和功能更弱的机器上进行了尝试,但当我运行相同的代码时,它的速度要慢得多,而在速度较慢的机器上,它只完成 10 条记录就退出了,就像它已经完成一样。在速度更快的机器上,它最多可以记录 35 条记录,然后退出。

知道可能导致问题的原因吗?

我的机器有更多的可再发行版本。他们能提供优势吗?

以下是获取部分所涉及的代码。

async def fetch(session, payload):
    url = ApiUrl
    #print(payload)
    async with session.get(url, data = payload) as response:
        readyResponse= await response.text()
        global c
        c+=1
        print(c)
        parseIt(readyResponse) # function that parses results


async def fetch_all(payloads, loop):
    connector = aiohttp.TCPConnector(limit=10)
    async with aiohttp.ClientSession(connector=connector, loop=loop) as session:
        results = await asyncio.gather(*[fetch(session, payload) for payload in allReq], return_exceptions=True)
        return results


if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    payloads = allReq
    htmls = loop.run_until_complete(fetch_all(payloads, loop))


标签: pythonpython-asyncioaiohttp

解决方案


我找到了答案。

我必须安装 pip install aiohttp[speedups],其中包括用于加速客户端 API 解析 DNS 的 aiodns,以及一个捆绑包中的 aiodns 和 brotlipy。

而已。


推荐阅读