Asynchronous 从另一个url处理程序写入tornado中的WebSocket列表

Asynchronous 从另一个url处理程序写入tornado中的WebSocket列表,asynchronous,websocket,tornado,nonblocking,comet,Asynchronous,Websocket,Tornado,Nonblocking,Comet,我正在创建一个具有websocket处理程序的web应用程序。在每个成功的连接上,我都将websocket处理程序对象附加到一个列表中。 另一个名为PostResultHandler的处理程序类接受POST数据。此PostResultHandler将由发送json数据的后台进程调用。一旦PostResultHandler收到这个json数据,我想写入WebSocket列表 目前,我正在遍历WebSocket列表并将json数据写入其中。但我认为这可能是一个阻塞调用,调用PostResultHan

我正在创建一个具有websocket处理程序的web应用程序。在每个成功的连接上,我都将websocket处理程序对象附加到一个列表中。 另一个名为PostResultHandler的处理程序类接受POST数据。此PostResultHandler将由发送json数据的后台进程调用。一旦PostResultHandler收到这个json数据,我想写入WebSocket列表

目前,我正在遍历WebSocket列表并将json数据写入其中。但我认为这可能是一个阻塞调用,调用PostResultHandler的后台进程将被阻塞,直到结果写入所有WebSocket

有没有办法使这段代码不阻塞,这样后台进程就可以毫无延迟地继续运行呢

    for waiter in cls.waiters:
        try:
            waiter.write_message(chat)
        except:
            logging.error("Error sending message", exc_info=True)

这不是阻塞呼叫。消息立即在服务器上缓冲,代码继续执行。

最好的选择是在ioloop上添加回调以发送每个websocket处理程序实例的数据。你可以做如下的事情

tornado.ioloop.ioloop.instance().add_回调(部分(websocket_handler_instance.write_message,msg))