2014-06-17 6 views
2

urlopenurllib3ReadTimeoutError에 도달하면 재 시도하지 않습니까? 내가 놓친 게 있니? 내 자신의 재시도 코드를 사용하여이 문제를 해결할 수 있지만 모듈의 코드를 사용하는 것이 좋습니다.Python urllib3 urlopen은 특정 오류가 발생하면 재 시도를 사용하지 않습니다.

conn = urllib3.HTTPConnectionPool(host, port=port) 
return conn.request(method, api_url, data, retries=3, 
        timeout=urllib3.Timeout(connect=2, read=3)) 

감사 :

여기 내 코드의 ... 난 명시 적으로 HTTPSConnectionPool.request()의 인수로 retries=3을 넣어 해봤지만 도움이되지 않습니다!

편집 : 당신이 볼 수 있듯이, ReadTimeoutError 더와 함께, 단지 만료 시간 후에 발생되지

2014-06-18 08:36:42,791 5585 DEBUG test 
openerp.addons.myaddon.xml_request.xml_request: args prepared 
2014-06-18 08:36:42,791 DEBUG Added an stderr logging handler to logger: 
urllib3 
2014-06-18 08:36:42,791 5585 DEBUG test urllib3: Added an stderr logging 
handler to logger: urllib3 
2014-06-18 08:36:42,792 INFO Starting new HTTPS connection (1): 
some.host.com 
2014-06-18 08:36:42,792 5585 INFO test urllib3.connectionpool: Starting new 
HTTPS connection (1): some.host.com 
2014-06-18 08:36:43,699 DEBUG Setting read timeout to 10 
2014-06-18 08:36:43,699 5585 DEBUG test urllib3.connectionpool: Setting read 
timeout to 10 
2014-06-18 08:36:53,722 5585 ERROR test openerp.osv.osv: Uncaught exception 
Traceback (most recent call last): 
    File "/home/openerp/server/openerp/osv/osv.py", line 132, in wrapper 
    return f(self, dbname, *args, **kwargs) 
    File "/home/openerp/server/openerp/osv/osv.py", line 199, in execute 
    res = self.execute_cr(cr, uid, obj, method, *args, **kw) 
    File "/home/openerp/server/openerp/osv/osv.py", line 187, in execute_cr 
    return getattr(object, method)(cr, uid, *args, **kw) 
    File "/home/openerp/custom_addons/myaddon/xml_request/xml_request.py", 
    line 260, in button_test 
    self.request(cr, uid, ids[0], data, context=context) 
    File "/home/openerp/custom_addons/myaddon/xml_request/xml_request.py", 
    line 234, in request 
    config_rec.xml_port, 'POST', api_url, vals) 
    File "/home/openerp/custom_addons/myaddon/xml_request/xml_request.py", 
    line 208, in connAndReq 
    timeout=urllib3.Timeout(connect=5, read=10)) 
    File "/usr/lib/python2.7/dist-packages/urllib3/request.py", line 79, in 
    request 
    **urlopen_kw) 
    File "/usr/lib/python2.7/dist-packages/urllib3/request.py", line 142, in 
    request_encode_body 
    **urlopen_kw) 
    File "/usr/lib/python2.7/dist-packages/urllib3/connectionpool.py", line 
    574, in urlopen 
    raise ReadTimeoutError(self, url, "Read timed out.") 
ReadTimeoutError: HTTPSConnectionPool(host=u'some.host.com', port=443): Read 
timed out. 

:

이제, 일부 디버그 정보와 응답은 (는 openERP에서 로그입니다) 다시 시도합니다.

+0

세 번 다시 시도하지 않고 실패한 것이 확실합니까? 더 자세한 작업을 보려면 로거를 추가하십시오 :'urllib3.add_stderr_logger()'; 그렇지 않은 경우 버그 일 수 있습니다. 우리는 여기에 더 자세한 재시도 제어 기능을 추가하기위한 홍보를하고 있습니다. https://github.com/shazow/urllib3/pull/326 – shazow

+0

@shazow 감사합니다. 추가했습니다. 더 많은 것을 지금보십시오 ^^ 나는 시험을 다 마쳤을 때 돌아올 것입니다. – Yann

+0

실제로이 문제는 https://github.com/shazow/urllib3/pull/399와 관련이 있다고 판단되어 수정되었습니다. 'master'의 urllib3을 사용해보십시오. 그래도 문제가 해결되지 않으면 문제를 열어주세요. :) – shazow

답변

3

이 모양은 urllib3 v1.8.2의 버그입니다.

fixed here이어야하며 master 분기에서 사용할 수 있습니다.

곧 출시 될 예정입니다. 불편을 드려 죄송합니다. :)