如何继续异步请求一组URLpython?

问题描述

我有一组URL(相同的http服务器,但请求参数不同)。我要实现的是继续异步或并行请求所有请求,直到我杀死它。

我首先使用threading.Thread()为每个URL创建一个线程,然后在请求函数中进行while True:循环。当然,这已经比单线程/单请求更快。但我想获得更好的性能。

然后我尝试使用aiohttp库来异步运行请求。我的代码是这样的(仅供参考,每个URL由url_baseproduct.id组成,并且每个URL都有用于请求的不同代理):

async def fetch(product,i,proxies,session):

    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/84.0.4147.105 Safari/537.36'}

    while True:
        try:
            async with session.get(
                url_base + product.id,proxy = proxies[i],headers=headers,ssl = False)
            ) as response:
                content = await response.read()
                print(content)
        except Exception as e:
            print('ERROR ',str(e))


async def startQuery(proxies):
    tasks = []
    async with aiohttp.ClientSession() as session:
        for [i,product] in enumerate(hermes_products):
            task = asyncio.ensure_future(fetch(product,session))
            tasks.append(task)
        responses = asyncio.gather(*tasks)
        await responses


loop = asyncio.get_event_loop()
loop.run_until_complete(startQuery(global_proxy))

观察结果是:1)它没有我期望的那么快。实际上比使用线程要慢。 2)更重要的是,在运行开始时,请求仅返回正常,不久,几乎所有请求都返回了以下错误:

ERROR  Cannot connect to host PROXY_IP:PORT ssl:False [Connect call failed ('PROXY_IP',PORT)]

ERROR  503,message='Too many open connections'

ERROR  [Errno 54] Connection reset by peer

我在这里做错什么了吗(尤其是在while True循环中?如果是这样,我如何正确地实现自己的目标?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...