我正在尝试做的是,有一个对象(它是一个在单独的线程中运行的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 fyi的新手
答案 0 :(得分: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()