假設我在Tornado中有一個JSON-RPC處理程序。在那個處理函數中有一個名爲start_connection的函數,在這個函數中建立了一個websocket連接。如何在連接成功時返回消息,並在連接失敗時返回另一條消息。Tornado:從回調中返回一個值
我嘗試這樣做:
class MainHandler(JSONRPCHandler):
def start_connection(self, uuid, addr):
try:
def store_connection(future):
conn = future.result()
# store conn
return {'success': True}
websocket.websocket_connect(addr, io_loop=main_loop, callback=store_connection)
except Exception, e:
return {'success': False, 'error_message': str(e)}
但是,這並不工作,因爲成功的消息不會從start_connection
返回,但是從回調。我也試過websocket_connect
前使用gen.coroutine
裝飾和添加yield
關鍵字,但是這導致了一個錯誤:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1115, in _stack_context_handle_exception
raise_exc_info((type, value, traceback))
File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1298, in wrapper
result = method(self, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/tornadorpc/tornadorpc/base.py", line 259, in post
self._RPC_.run(self, request_body)
File "/usr/lib/python2.7/dist-packages/tornadorpc/tornadorpc/base.py", line 103, in run
self.dispatch(request[0], request[1])
File "/usr/lib/python2.7/dist-packages/tornadorpc/tornadorpc/base.py", line 145, in dispatch
final_kwargs, extra_args = getcallargs(method, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/tornadorpc/tornadorpc/utils.py", line 23, in getcallargs
self_key = args.pop(0)
IndexError: pop from empty list
任何人知道如何解決這個問題?