连接错误,超过了URL的最大重试次数,(由None引起)。

8

当出现以下内容时,它是什么意思:

requests.exceptions.ConnectionError: None: Max retries exceeded with url: /myurl (Caused by None)

"Caused by None"的具体含义是什么?
我有一个Python客户端和一个简单的Clojure服务器在同一台机器上运行。该服务器在compojure+http-kit上运行,使用4个线程。客户端使用multiprocessing.Pool和3个工作进程连续提交POST请求。
不时地,客户端会因上述ConnectionError而中断。我在客户端设置重试次数为3,并将服务器队列大小增加到1000000,但无效。
任何帮助都将不胜感激。
编辑:更正一下,我实际发送的是POST请求而不是GET请求。
实际脚本过于庞大,无法在此处贴出,但基本上是这样运行的。我有一个函数调用post并传递一些数据。
def post_func(my_data, config):
    return requests.post(my_url, data=json.dumps({"data": my_data, "config": config}))

这是一个包装了multiprocessing.Pool的类:

class Executor(object):
    def __init__(self, nprocs):
        self.pool = Pool(processes=nprocs)

    def execute(self, func, list_of_data):
        return self.pool.map(func, list_of_data)

另一个使用不同配置调用Executor.execute()的函数:

function eval(executor, list_of_data, config):
    start = timer()
    func = partial(post_func, config=config)
    results = executor.execute(func, list_of_data)
    taken = timer()-start
    return results

所有的eval()调用都重复使用单个Executor。然后将eval()包装在评分函数中,并提供给pyswarm进行优化:

pso(score_func, lbs, ubs, swarmsize=20, maxiter=20, debug=True)

编辑:我可能早些时候就应该做,但正确捕获ConnectionError会给我带来以下结果:

ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=5000): Max retries exceeded with url: /my_url (Caused by NewConnectionError('<requests.packages.urllib3.connection.HTTPConnection object at 0x7f0ccb4b5550>: Failed to establish a new connection: [Errno 99] Cannot assign requested address',))

我已经重写了脚本,使用一个 requests.Session,很快就会知道这是否解决了问题。


添加导致错误的代码。 - Padraic Cunningham
请查看此链接:https://dev59.com/h2Ml5IYBdhLWcg3wV10F - joel goldstick
@joelgoldstick,对于那个问题有什么特别的评论吗?我没有收到“BadStatusLine”错误,我得到了一个None。 - TheTaintedOne
@TheTaintedOne,你能解决这个问题吗?当在任务中运行请求器时,我遇到了同样的问题。 - oriaj
@TheTaintedOne,你得到答案了吗? - Volatil3
1
@Volatil3,我通过重复使用单个请求会话解决了这个问题。 - TheTaintedOne
1个回答

1

我通过重复使用单个请求会话解决了这个问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接