Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tornado:从回调返回值_Python_Tornado_Yield - Fatal编程技术网

Python Tornado:从回调返回值

Python Tornado:从回调返回值,python,tornado,yield,Python,Tornado,Yield,假设我在Tornado中有一个JSON-RPC处理程序。在该处理程序中,有一个名为start_connection的函数,其中建立了websocket连接。如何在连接成功时返回消息,在连接失败时返回另一条消息 我试过这个: class MainHandler(JSONRPCHandler): def start_connection(self, uuid, addr): try: def store_connection(future):

假设我在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\u connection
返回的,而是从回调返回的。我还尝试使用
gen.coroutine
装饰器,并在
websocket\u 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

有人知道如何解决这个问题吗?

我是龙卷风新手,但让我试试

在异步服务器中调用回调的整个想法不就是在退出后的一段明显的时间内调用它吗

我相信您必须在回调本身中处理结果,或者执行类似的操作

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

或者,更确切地说,doc建议龙卷风使用:


糟糕的是,我不得不使用tornadorpc的异步装饰器,如下所述:

future.add_done_callback(some_completion_callback)
main_loop.add_future(future, some_completion_callback)