2014-01-31 4 views
2

셀로리를 통해 비동기 적으로 작업을 실행하는 기능을 작성하고 로컬에서 테스트 해 보았습니다. 내 스테이징 환경으로 보내고 셀러리가 작업을 소비하려고하면 다음과 같은 추적으로 실패합니다.socket.py에 심각한 오류가 발생했습니다. TypeError : 부동 소수점이 필요합니다.

이 오류를 디버깅 할 수있는 방법이 무엇인지 모르겠다. 셀러 리가 호출하여 파이썬 표준 라이브러리에 깊이 들어가있다. 어떤 아이디어?

Traceback (most recent call last): 
    File "/home/ubuntu/hypnos-venv/local/lib/python2.7/site-packages/celery/app/trace.py", line 238, in trace_task 
    R = retval = fun(*args, **kwargs) 
    File "/home/ubuntu/hypnos-venv/local/lib/python2.7/site-packages/celery/app/trace.py", line 416, in __protected_call__ 
    return self.run(*args, **kwargs) 
    File "/home/ubuntu/Hypnos/hypnos/recs_jobber/tasks.py", line 5, in send_sms_action 
    msg = twilio_client.sms.messages.create(body = sms_action.body, to=sms_action.to_number, from_=TW_NUMBER) 
    File "/home/ubuntu/hypnos-venv/local/lib/python2.7/site-packages/twilio/rest/resources/sms_messages.py", line 167, in create 
    return self.create_instance(kwargs) 
    File "/home/ubuntu/hypnos-venv/local/lib/python2.7/site-packages/twilio/rest/resources/base.py", line 352, in create_instance 
    data=transform_params(body)) 
    File "/home/ubuntu/hypnos-venv/local/lib/python2.7/site-packages/twilio/rest/resources/base.py", line 204, in request 
    resp = make_twilio_request(method, uri, auth=self.auth, **kwargs) 
    File "/home/ubuntu/hypnos-venv/local/lib/python2.7/site-packages/twilio/rest/resources/base.py", line 129, in make_twilio_request 
    resp = make_request(method, uri, **kwargs) 
    File "/home/ubuntu/hypnos-venv/local/lib/python2.7/site-packages/twilio/rest/resources/base.py", line 101, in make_request 
    resp, content = http.request(url, method, headers=headers, body=data) 
    File "/home/ubuntu/hypnos-venv/local/lib/python2.7/site-packages/httplib2/__init__.py", line 1570, in request 
    (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey) 
    File "/home/ubuntu/hypnos-venv/local/lib/python2.7/site-packages/httplib2/__init__.py", line 1317, in _request 
    (response, content) = self._conn_request(conn, request_uri, method, body, headers) 
    File "/home/ubuntu/hypnos-venv/local/lib/python2.7/site-packages/httplib2/__init__.py", line 1252, in _conn_request 
    conn.connect() 
    File "/home/ubuntu/hypnos-venv/local/lib/python2.7/site-packages/httplib2/__init__.py", line 1017, in connect 
    sock.settimeout(self.timeout) 
    File "/usr/lib/python2.7/socket.py", line 224, in meth 
    return getattr(self._sock,name)(*args) 
TypeError: a float is required 

프레임에 들어가기 위해 사용한 Celery의 rdb와 소켓 시간 초과가 설정되지 않은 것처럼 보입니다.

(Pdb) self.timeout 
<Unset Timeout Value> 

어떻게 해결할 수 있습니까? _socket에 대한 래퍼 인 Twilio -> httplib2 -> socket.py에서 오류가 발생했습니다. 이것은 내 머리 위로하고 문제를 해결하는 방법조차 모르겠다.

답변

2

는 Twilio 해방 세트에 타임 아웃.

self.client = TwilioRestClient(TWILIO_SID, 
        TWILIO_AUTH_TOKEN, 
        timeout=None) 
: 없음

설정 시간 제한 TwilioRestClient를 초기화하는 오류를 수정하는 것

1

여기에 무슨 일이 일어나고 있는지의 :

  • 당신은 SMS 메시지를 작성하는 Twilio 라이브러리를 말하는 것입니다.
  • Twilio는 Twilio 서버에 연결하기 위해 httplib으로갑니다.
  • httplib은 Twilio 서버에 연결하는 동안 소켓의 시간 초과를 설정합니다.

유일한 이유는 두 번째 스택 프레임에서 self.timeoutfloat이 아니기 때문입니다. 당신은 당신은 당신이 당신의 응용 프로그램을 실행하는 데 run를 입력 할 수있는 프롬프트를 얻을 것이다 : 파이썬 디버거에서 응용 프로그램을 실행

python -m pdb myapp.py 

을 예컨대을 시도 할 수 있습니다. 오류가 발생하면 프롬프트로 돌아갑니다. 그런 다음 문제가되는 프레임에 도달하여 self.timeout이 무엇인지 알 때까지 up을 입력 할 수 있어야합니다. 그런 다음 주변을 둘러보고 self.timeout이 그 곳으로 설정되는 이유와 그 이유를 살펴볼 수 있습니다. 그런 다음이를 수정하여 문제를 해결할 수 있어야합니다.

class _UnsetTimeoutKls(object): 
    """ A sentinel for an unset timeout. Defaults to the system timeout. """ 
    def __repr__(self): 
     return '<Unset Timeout Value>' 


# None has special meaning for timeouts, so we use this sigil to indicate 
# that we don't care 
UNSET_TIMEOUT = _UnsetTimeoutKls() 

그래서 뭔가 평가하는 TwilioRestClient 실제 소켓 호출 인스턴스 사이에서 발생해야한다는 없음 다른 뭔가 _UnsetTimeoutKls : 기본적으로

관련 문제