簡體   English   中英

龍卷風:從回調返回值

[英]Tornado: returning a value from callback

假設我在Tornado中有一個JSON-RPC處理程序。 在該處理程序中,有一個名為start_connection的函數,在其中建立了websocket連接。 連接成功時如何返回消息,連接失敗時如何返回另一條消息。

我嘗試了這個:

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返回的,而是從回調返回的。 我還嘗試使用gen.coroutine裝飾器,並在websocket_connect之前添加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

有人知道如何解決這個問題嗎?

我是龍卷風的新手,但讓我嘗試。

websocket_connect()退出后的明顯時間中,異步服務器中回調的整個想法是否會稱為LATER?

我相信您必須在回調本身中處理結果,或執行類似的操作

future = websocket.websocket_connect( \
   addr, io_loop=main_loop, callback=store_connection)

future.add_done_callback(some_completion_callback)

或者說,由推薦用於龍卷風add_done_callback()文檔,使用IOLoop.add_future() :

main_loop.add_future(future, some_completion_callback)

不好的是,我不得不使用tornadorpc的異步裝飾器,如下所述: https : //github.com/joshmarshall/tornadorpc#asynchronous-example

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM