从现有的ApplicationSession和事件循环开始

时间:2015-12-06 20:49:47

标签: python twisted autobahn crossbar

我希望能够从现有的事件循环/反应器中生成一个独立的事件循环/反应器。假设我在模块standaloneapps中有一个应用程序:

#in standaloneapps.py
class StandaloneApp(ApplicationSession):
    def runner(self, message):
        print(message)

    @inlineCallbacks
    def start_app(self):
        yield self.subscribe(self.runner, 'com.example.some_topic')

我希望能够从其他启动此应用程序。例如:

from standaloneapps import StandaloneApp

class ApplicationStarter(ApplicationSession):

    @inlineCallbacks
    def onJoin(self, details):
        yield self.subscribe(self.start_app, 'com.example.startapp')

    def start_app(self, message):
        print('subscribing to app')
        new_runner = ApplicationRunner(url="ws://127.0.0.1:8080/ws", 
                                   realm="realm1") 
        runner.run(StandaloneApp)

我可以启动ApplicationStarter,但只要我发布事件'com.example.startapp'横杆崩溃异常builtins.Exception: not joined

也许这看起来像是一个过于复杂的设置,但我试图让一个应用程序订阅一个'app dispatcher',它可以动态启动新的应用程序,这些应用程序可能或者可能不会提前知道。我希望新的应用程序在不同的事件循环上运行,以便保持隔离。

1 个答案:

答案 0 :(得分:0)

编辑:所有必要的是添加:             runner.run(StandaloneApp,start_reactor = False)

启动第二个应用程序的调用。这迫使它在同一个循环中运行。