2013-10-14 53 views
4

我想要做的,是有一个对象(它是在一个单独的线程运行的GStreamer进程)可以调用一个WebSocketHandler的write_message()函数WebSocketHandler不调用初始化

这是我目前有的一段代码

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") 

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

__init__() 

也不起作用。 还有另一种方法可以从它自己的类之外的RadioSocketHandler中调用一个函数吗? 我很新的Python的FYI

回答

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 

我不得不放弃参数到初始化功能上以不同的方式。我忘了super()