2013-10-14 2 views
4

То, что я пытаюсь сделать, это есть объект (это процесс GStreamer, который работает в отдельном потоке), чтобы иметь возможность вызвать функцию write_message() в виде WebSocketHandlerWebSocketHandler не вызывает инициализацию

Вот фрагмент кода, который у меня есть

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

ответ

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

Смежные вопросы