2014-01-30 3 views
0

요청 모듈을 사용하여 Python 앱을 만들고 있습니다. 나는 최근에 멀티 프로세싱을 추가하여 속도를 조금 높였지만, [Errno 1] _ssl.c:1428: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number 또는 [Errno 1] _ssl.c:1428: error:1408F119:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac과 같은 이상한 오류가 발생하기 시작했습니다. 코드는 다음과 같습니다Python 요청 ssl [Errno 1] _ssl.c : 1428 : 오류 : 1408F10B : SSL 루틴 : SSL3_GET_RECORD : 잘못된 버전 번호

def hometables_one(conn, request, s, hostname, payload, company): 
    date1 = request.query.get('date1', '')  
    date2 = request.query.get('date2', '') 

    prijmyCelk = 0; 
    vydajeCelk = 0; 
    neuhrPrijCelk = 0; 
    neuhrVydCelk = 0; 
    dph = 0; 
    dbNazev = company['dbNazev']; 
    nazev = company['nazev']; 

    if date1 and date2: 
     try: 
      r = s.get("%s/c/%s/faktura-vydana/(duzpPuv between %s %s)/$sum.json" % (hostname, dbNazev, date1[0], date2[0]), params=payload, verify=False) 
      r.raise_for_status() 
     except requests.exceptions.RequestException as err: 
      #response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}})) 
      #return response 
      conn.send({ "success": False, "errors": { "reason": str(err)}}) 
      conn.close() 
      return None 

    else: 
     try: 
      r = s.get("%s/c/%s/faktura-vydana/$sum.json" % (hostname, dbNazev), params=payload, verify=False) 
      r.raise_for_status() 
     except requests.exceptions.RequestException as err: 
      #response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}})) 
      #return response 
      conn.send({ "success": False, "errors": { "reason": str(err)}}) 
      conn.close() 
      return None 

    obj_vydana = r.json() 
    data_vydana = obj_vydana['winstrom']['sum']['sumDoklUcetni']['values'] 
    prijmyCelk = float(data_vydana['sumDoklCelkem']['value']) 
    neuhrVydCelk = float(data_vydana['sumDoklZbyvaUh']['value']) 
    dph_vydane = float(data_vydana['sumDoklDphCelk']['value']) 


    if date1 and date2: 
     try: 
      r = s.get("%s/c/%s/faktura-prijata/(duzpPuv between %s %s)/$sum.json" % (hostname, dbNazev, date1[0], date2[0]), params=payload, verify=False) 
      r.raise_for_status() 
     except requests.exceptions.RequestException as err: 
      #response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}})) 
      #return response 
      conn.send({ "success": False, "errors": { "reason": str(err)}}) 
      conn.close() 
      return None 

    else: 
     try: 
      r = s.get("%s/c/%s/faktura-prijata/$sum.json" % (hostname, dbNazev), params=payload, verify=False) 
      r.raise_for_status() 
     except requests.exceptions.RequestException as err: 
      #response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}})) 
      #return response 
      conn.send({ "success": False, "errors": { "reason": str(err)}}) 
      conn.close() 
      return None 

    obj_prijata = r.json(); 
    data_prijata = obj_prijata['winstrom']['sum']['sumDoklUcetni']['values'] 
    vydajeCelk = float(data_prijata['sumDoklCelkem']['value']) 
    neuhrPrijCelk = float(data_prijata['sumDoklZbyvaUh']['value']) 
    dph_prijate = float(data_prijata['sumDoklDphCelk']['value']) 

    if prijmyCelk != 0: 
     result = { 
      "corporation": nazev, 
      "dbName": dbNazev, 
      "prijmyCelk": "%s €" % prijmyCelk, 
      "nakladyCelk": "%s €" % vydajeCelk, 
      "ziskCelk": "%s €" % (prijmyCelk-vydajeCelk), 
      "marzaCelk": ((prijmyCelk-vydajeCelk)/prijmyCelk*100), 
      "neuhrVydCelk": "%s €" % neuhrVydCelk, 
      "neuhrPrijCelk": "%s €" % neuhrPrijCelk, 
      "dph": "%s €" % (dph_vydane-dph_prijate), 
     } 
    else: 
     result = { 
      "corporation": nazev, 
      "dbName": dbNazev, 
      "prijmyCelk": "%s €" % prijmyCelk, 
      "nakladyCelk": "%s €" % vydajeCelk, 
      "ziskCelk": "%s €" % (prijmyCelk-vydajeCelk), 
      "marzaCelk": 0, 
      "neuhrVydCelk": "%s €" % neuhrVydCelk, 
      "neuhrPrijCelk": "%s €" % neuhrPrijCelk, 
      "dph": "%s €" % (dph_vydane-dph_prijate), 
     } 
    conn.send(result) 
    conn.close() 
    return None 
##################################################################################### 

def hometables(request): 
    s = requests.Session() 
    response = HTTPResponse() 
    hostname = request.query.get('hostname', '')[0] 
    auth = request.query.get('auth', '')[0] 
    p_queue = [] 
    result = [] 

    json_r = {"success": True} 
    payload = {'authSessionId': request.query.get('auth', '')[0]} 
    try: 
     r = s.get("%s/c.json" % hostname, params=payload, verify=False) 
     r.raise_for_status() 
    except requests.exceptions.RequestException as err: 
     response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}})) 
     return response 

    obj = r.json() 
    data = obj['companies']['company'] 
    data = make_list(data) 

    parent_conn, child_conn = Pipe() 
    for company in data: 
     p_queue.append(Process(target=hometables_one, args=(child_conn, request, s, hostname, payload, company))) #create a new process with hometables_one function 
     p_queue[-1].start() 

    for p in p_queue: 
     received_data = parent_conn.recv() 
     if "success" not in received_data: 
      result.append(received_data)s 
      p.join() 
     else: 
      response.write(ujson.dumps(received_data)) #error in hometables_one function 
      return response 

    json_r["data"] = result 
    response.write(ujson.dumps(json_r)) 
    return response 

이 부분

try: 
     r = s.get("%s/c.json" % hostname, params=payload, verify=False) 
     r.raise_for_status() 
    except requests.exceptions.RequestException as err: 
     response.write(ujson.dumps({ "success": False, "errors": { "reason": str(err)}})) 
     return response 

    obj = r.json() 
    data = obj['companies']['company'] 
      data = make_list(data) 

에서 나는 모든 회사 현재 시스템에서 다음 내가 그들 각각에 대한 hometables_one 기능을 실행할 수있는 JSON 요청을 얻을. 마지막 data은 다음과 같이 보일 수 있습니다 : 첫 번째 경우

[{"createDt":"2014-01-28T00:00:00+01:00","dbNazev":"sveatlo","id":"4","licenseGroup":"null","nazev":"Sveatlo","show":"true","stavEnum":"ESTABLISHED","watchingChanges":"false"},{"createDt":"2014-01-28T00:00:00+01:00","dbNazev":"sveatlo1","id":"4","licenseGroup":"null","nazev":"Sveatlo1","show":"true","stavEnum":"ESTABLISHED","watchingChanges":"false"}] 

, 단지 하나 개 hometables_one 기능이 문제없이 실행 항목, 그러나 다른 항목의 결과를 추가있을 때 :

[{"createDt":"2014-01-28T00:00:00+01:00","dbNazev":"sveatlo","id":"4","licenseGroup":"null","nazev":"Sveatlo","show":"true","stavEnum":"ESTABLISHED","watchingChanges":"false"}] 

또는 같은

오류 [Errno 1] _ssl.c:1428: error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number 또는 [Errno 1] _ssl.c:1428: error:1408F119:SSL routines:SSL3_GET_RECORD:decryption failed or bad record mac입니다. 또 다른 점은 멀티 프로세싱없이 코드를 실행할 때, 즉 hometable_one 함수의 내용이 hometables 함수의 for 루프에 있으면 문제없이 실행된다는 것입니다. 왜 이러한 오류가 발생합니까? 아무도 나 좀 도와 줄래?

모든 답변 주셔서 감사합니다.

+0

아마 https://stackoverflow.com/questions/3724900/python-ssl-problem-with-multiprocessing의 중복 : 당신이 시도 할 수있는 것은 그들이 요청을 해고하기 전에 각 프로세스에 대한 임의의 지연을 소개하는 것입니다 –

+0

관련이있을 수 있습니까? http://stackoverflow.com/questions/4783735/problem-with-multi-threaded-python-app-and-socket-connections - 그렇다면 해당 링크의 일부 솔루션 – Cian

답변

2

비슷한 문제가 발생했습니다. 이 오류는 동일한 SSL 연결에 액세스하려는 여러 프로세스의 결과라고 생각합니다.

time.sleep(random.randrange(10)) 
r = s.get("%s/c.json" % hostname, params=payload, verify=False) 
+0

[airflow] (https://github.com/airbnb/airflow)를 설치할 때 비슷한 오류가 발생했습니다. 내가 권고 한대로 아래 파일을 수정했습니다. 그럼 잘 했어, 고마워. /usr/local/src/Python-2.7.5/Lib/ssl.py – Sankame