def run(self):
        """
        Run forever, listening on the 'default' tube. When a message
        is received, send it down all the registered non-default tubes.
        """
        beanstalk_host = self.config.get('beanstalk.host',
                DEFAULT_BEANSTALK_HOST)
        beanstalk_port = self.config.get('beanstalk.port',
                DEFAULT_BEANSTALK_PORT)
        beanstalk = make_beanstalkc(beanstalk_host, beanstalk_port)
        listeners = self.config.get('beanstalk.listeners', [__name__])

        tubes = []
        for listener in listeners:
            listener_module = __import__(listener, {}, {}, ['Listener'])
            tube = listener_module.Listener.TUBE
            listener_runner = listener_module.Listener(
                    kwargs={'tube': tube, 'config': self.config})
            listener_runner.daemon = True
            listener_runner.start()
            tubes.append(tube)

        try:
            while True:
                job = beanstalk.reserve()
                for tube in tubes:
                    beanstalk.use(tube)
                    beanstalk.put(job.body)
                job.delete()
        except beanstalkc.SocketError, exc:
            # retry on new client
            LOGGER.error('dispatcher error reading beanstalk, restart: %s',
                    exc)
            self.run()
 def run(self):
     LOGGER.info('listener starting up')
     config = self._kwargs['config']
     self.serializer = Serializer('json', {'tiddlyweb.config': config})
     beanstalk_host = config.get('beanstalk.host', DEFAULT_BEANSTALK_HOST)
     beanstalk_port = config.get('beanstalk.port', DEFAULT_BEANSTALK_PORT)
     self.beanstalkc = make_beanstalkc(beanstalk_host, beanstalk_port)
     BaseListener.run(self)
 def run(self):
     config = self._kwargs['config']
     tube = self._kwargs['tube']
     beanstalk_host = config.get('beanstalk.host', DEFAULT_BEANSTALK_HOST)
     beanstalk_port = config.get('beanstalk.port', DEFAULT_BEANSTALK_PORT)
     beanstalk = make_beanstalkc(beanstalk_host, beanstalk_port)
     beanstalk.watch(tube)
     beanstalk.ignore('default')
     LOGGER.debug('using %s', beanstalk.using())
     self.config = config
     try:
         while True:
             job = beanstalk.reserve()
             self._act(job)
             job.delete()
     except beanstalkc.SocketError, exc:
         # retry on new client
         LOGGER.error('listener error reading beanstalk, restart: %s',
                 exc)
         self.run()