是什麼意思時,它說:ConnectionError,最大重試次數超過了使用URL(由無引起)
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。我在客戶端設置retries = 3,並將服務器上的隊列大小增加到1000000,不起作用。
任何幫助,將不勝感激。
編輯:一個更正,我實際上發送POST請求不GET。
實際的腳本太大而不能在這裏發佈,但基本上它是這樣工作的。我有一些數據後調用一個函數:
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',))
我現在重寫了腳本以重用單個請求.Session,如果能夠解決這個問題,很快就會知道。
添加導致錯誤的代碼 –
選中此項:http://stackoverflow.com/questions/18478013/python-requests-exceptions-connectionerror-max-retries-exceeded-with-url –
@joelgoldstick任何特定評論那個問題? 我沒有收到「BadStatusLine」錯誤,我收到一個無。 – TheTaintedOne