2016-10-11 2 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) 

Я хочу иметь е, когда я вхожу в ложный порт или хост. Как я могу это сделать? Я устал добавлять raise IOError("connection error") после beanstalk = beanstalkt.Client(host='host', port=port) Но это заставляет ошибку, и я просто хочу иметь ошибку, когда она существует.

+0

Не могли бы вы выслать полный код? – Simon

+0

@Simon, остальная часть моего кода не касается этой части. – wxcvbn

+0

Хорошо. Часть тогда? Отсутствует полное заявление. – Simon

ответ

1

Здесь читается код. В beanstalkt 0,6-х connect, он создает IOStream для подключения к серверу:

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

Он регистрирует функцию обратного вызова для выполнения на успех, но если соединение не удается, то просто позвоните Client._reconnect один раз в секунду навсегда. Я думаю, вам следует открыть запрос функции в своем проекте 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

Смежные вопросы