当它说:
时意味着什么requests.exceptions.ConnectionError: None: Max retries exceeded with url: /myurl (Caused by None)
具体来说,“由无引起”是什么意思?
我有一个python客户端和一台运行在同一台机器上的简单clojure服务器。服务器运行在带有4个线程的compojure + http-kit上。客户端使用带有3个工作进程的multiprocessing.Pool,使用3到4个进程连续提交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
单个Executor重用于所有eval()调用。然后将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,如果能解决这个问题很快就会知道。
答案 0 :(得分:0)
重用单个请求会话为我解决了问题。