当出现以下内容时,它是什么意思:
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,很快就会知道这是否解决了问题。