2016-10-11 5 views
1

메서드를 실행하고 싶습니다.이 메서드는 작동하지 않으며 메서드에서 반환 된 오류를 가져 오려고합니다. 토네이도 오류 예외를 반환하는 방법?

내 코드입니다 :

def is_connect(s): 
    print("ok connection") 
    print(s) 
    ioloop.stop() 


try: 


    current_job_ready = 0 
    print("ok1") 
    beanstalk = beanstalkt.Client(host='host', port=port) 

    print("ok1") 
    beanstalk.connect(callback=is_connect) 


    ioloop = tornado.ioloop.IOLoop.instance() 
    ioloop.start() 
    print("ok2") 
except IOError as e: 
    print(e) 

그리고 이것은 내가 결선 포트 내 프로그램을 실행할 때 내가 가지고있는 오류입니다 :

WARNING:tornado.general:Connect error on fd 7: ECONNREFUSED 
ERROR:tornado.application:Exception in callback <functools.partial object at 0x7f5a0eac6f18> 
Traceback (most recent call last): 
    File "/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py", line 604, in _run_callback 
    ret = callback() 
    File "/usr/local/lib/python2.7/dist-packages/tornado/stack_context.py", line 275, in null_wrapper 
    return fn(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/tornado/ioloop.py", line 619, in <lambda> 
    self.add_future(ret, lambda f: f.result()) 
    File "/usr/local/lib/python2.7/dist-packages/tornado/concurrent.py", line 237, in result 
    raise_exc_info(self._exc_info) 
    File "/usr/local/lib/python2.7/dist-packages/tornado/gen.py", line 270, in wrapper 
    result = func(*args, **kwargs) 
TypeError: connect() takes exactly 1 argument (2 given) 

는 내가 잘못된 포트를 입력 할 때 전자를 갖고 싶어 또는 호스트. 어떻게해야합니까? beanstalk = beanstalkt.Client(host='host', port=port) 뒤에 raise IOError("connection error")을 추가하는 것에 지쳤습니다. 그러나이 작업은 오류를 발생시키고 오류가 있기를 원합니다.

+0

전체 코드를 게시 할 수 있습니까? – Simon

+0

@ Simon, 나머지 부분은이 부분의 문제가 아닙니다. – wxcvbn

+0

좋아. 그럼 그 부분? 누락 된 전체 진술. – Simon

답변

1

코드 읽기가 도움이됩니다. 그것은 성공에 실행되는 콜백을 등록

https://github.com/nephics/beanstalkt/blob/v0.6.0/beanstalkt/beanstalkt.py#L108

하지만 연결이 실패 할 경우는 초당 한 번 Client._reconnect 전화 할게 : 0.6의 connect는, 그것이 IOStream을 생성 beanstalkt에서 서버에 연결 영원히. 난 당신이 GitHub 프로젝트에서 오류 알림 시스템을 묻는 메시지를 connect에 열어야한다고 생각합니다. 현재 Beanstalkt 구현을 통해 성공을 기꺼이 기다리는 기간을 결정하면됩니다.

import sys 
from datetime import timedelta 

from tornado.ioloop import IOLoop 

def is_connect(s): 
    print("ok connection") 
    print(s) 
    loop.remove_timeout(timeout) 
    # Do something with Beanstalkd.... 

def connection_failed(): 
    print(sys.stderr, "Connection failed!") 
    # Could call IOLoop.stop() or just quit. 
    sys.exit(1) 

loop = IOLoop.current() 
timeout = loop.add_timeout(timedelta(seconds=1), connection_failed) 
beanstalk.connect(callback=is_connect) 
loop.start() 
+0

고맙습니다. 완벽하게 작동합니다! – wxcvbn

+0

@A. Jesse Jiryu Davis 안녕하세요,이 문제로 제발 도와 주실 수 있습니까? http://stackoverflow.com/questions/40629057/run-worker-beanstalkt-tornado-in-docker-container – John

관련 문제