2013-10-14 55 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()