4

我想要做的是有一个对象(它是一个在单独的线程中运行的 gstreamer 进程)能够调用 WebSocketHandler 的 write_message() 函数

这是我目前拥有的一段代码

app = tornado.web.Application([
    (r'/', RadioSocketHandler),
])


class RadioSocketHandler(tornado.websocket.WebSocketHandler):
    def initialize(self):
        self.player = MusicPlayer(self)
        thread.start_new(self.player.start(), ())

class MusicPlayer(object):
    websocket_handler = None

    def __init__(self, sockethandler):
        self.websocket_handler = sockethandler
        self.websocket_handler.write_message("success")

但是,它不起作用。'initialize' 永远不会被调用。我究竟做错了什么?

__init__()

也不行。还是有另一种方法可以从 RadioSocketHandler 调用它自己的类之外的函数?我对 Python 很陌生,仅供参考

4

1 回答 1

4

好吧,我得到了它与以下工作:

app = tornado.web.Application([
    (r'/', RadioSocketHandler, {'player': player}),
])

class RadioSocketHandler(tornado.websocket.WebSocketHandler):
    def __init__(self, *args, **kwargs):
        self.musicplayer = kwargs.pop('player')
        self.musicplayer.set_sockethandler(self)
        super(RadioSocketHandler, self).__init__(*args, **kwargs)

class MusicPlayer(object):
    websocket_handler = None

    def set_sockethandler(self, handler):
        self.websocket_handler = handler

我不得不以不同的方式将参数提供给init函数。我忘记了 super()

于 2013-10-15T09:31:14.407 回答