我希望能够从现有的事件循环/反应器中生成一个独立的事件循环/反应器。假设我在模块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',它可以动态启动新的应用程序,这些应用程序可能或者可能不会提前知道。我希望新的应用程序在不同的事件循环上运行,以便保持隔离。
答案 0 :(得分:0)
编辑:所有必要的是添加: runner.run(StandaloneApp,start_reactor = False)
启动第二个应用程序的调用。这迫使它在同一个循环中运行。