2016-02-16 1 views
0

Мне нужно создать MultiService, который загружается асинхронно в витой плагин, есть ли способ достижения этого?Twisted makeService() async

Вот что я сделал до сих пор:

приложение/plugins.py

class Options(usage.Options): 
    synopsis = '[options]' 
    longdesc = (
     'Starts app modules services. The modules must ' 
     'be configured and enabled for the current server ' 
     'before being started. To see the list installed modules ' 
     'use the --list switch.') 
    optFlags = [['list', 'l', 'Display the list of installed modules.']] 


def makeService(options): 
    from twisted.internet import reactor 
    debug = options['debug'] 
    return app.ModuleService.load(reactor) 

витые/плагины/app_plugins.py

TestService = ServiceMaker(
    'test', 
    'app.plugins', 
    'Test service.', 
    'test') 

приложение. py

class ModuleService(service.MultiService): 
    def __init__(self, reactor=None): 

     # Twisted old style classes 
     service.MultiService.__init__(self) 

     if reactor is None: 
      from twisted.internet import reactor 
     self._reactor = reactor 

    @classmethod 
    @defer.inlineCallbacks 
    def load(cls, reactor=None): 

     modules = yield get_modules() 

     service = cls(reactor) 

     for module in modules: 
      # module tcp server 
      mod_endpoint = endpoints.TCP4ServerEndpoint(reactor, module.port) 
      module_service = internet.StreamServerEndpointService(
       mod_endpoint, 
       pb.PBServerFactory(spread.RunnerServer())) 
      module_service.setServiceParent(service) 

     defer.returnValue(service) 

Так моя проблема в том, что MultiService загружается асинхронно и поэтому не может использоваться в функции makeService, кто-то может мне помочь?

ответ

0

Услуги в витой не должны запускаться асинхронно. Начало обслуживания выполняется до запуска реактора. Вы должны изменить свою архитектуру приложения. В настоящее время я изучаю, как: D