1

我希望能够从现有的事件循环/反应器中生成一个独立的事件循环/反应器。假设我在模块中有一个应用程序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

也许这似乎是一个过于复杂的设置,但我试图让一个应用程序订阅一个“应用程序调度程序”,它可以动态启动可能提前知道或不知道的新应用程序。我希望新应用程序在不同的事件循环上运行以保持隔离。

4

1 回答 1

0

编辑:只需要添加: runner.run(StandaloneApp, start_reactor=False)

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

于 2015-12-06T21:18:50.473 回答