|  | @@ -19,6 +19,7 @@ from celery.platforms import IS_WINDOWS, Pidfile, signal_name, signals
 | 
											
												
													
														|  |  from celery.utils.nodenames import (
 |  |  from celery.utils.nodenames import (
 | 
											
												
													
														|  |      gethostname, host_format, node_format, nodesplit,
 |  |      gethostname, host_format, node_format, nodesplit,
 | 
											
												
													
														|  |  )
 |  |  )
 | 
											
												
													
														|  | 
 |  | +from celery.utils.saferepr import saferepr
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  __all__ = ['Cluster', 'Node']
 |  |  __all__ = ['Cluster', 'Node']
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -96,14 +97,17 @@ class Node(object):
 | 
											
												
													
														|  |          return self.send(0)
 |  |          return self.send(0)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def send(self, sig, on_error=None):
 |  |      def send(self, sig, on_error=None):
 | 
											
												
													
														|  | -        try:
 |  | 
 | 
											
												
													
														|  | -            os.kill(self.pid, sig)
 |  | 
 | 
											
												
													
														|  | -        except OSError as exc:
 |  | 
 | 
											
												
													
														|  | -            if exc.errno != errno.ESRCH:
 |  | 
 | 
											
												
													
														|  | -                raise
 |  | 
 | 
											
												
													
														|  | -            maybe_call(on_error, self)
 |  | 
 | 
											
												
													
														|  | -            return False
 |  | 
 | 
											
												
													
														|  | -        return True
 |  | 
 | 
											
												
													
														|  | 
 |  | +        pid = self.pid
 | 
											
												
													
														|  | 
 |  | +        if pid:
 | 
											
												
													
														|  | 
 |  | +            try:
 | 
											
												
													
														|  | 
 |  | +                os.kill(pid, sig)
 | 
											
												
													
														|  | 
 |  | +            except OSError as exc:
 | 
											
												
													
														|  | 
 |  | +                if exc.errno != errno.ESRCH:
 | 
											
												
													
														|  | 
 |  | +                    raise
 | 
											
												
													
														|  | 
 |  | +                maybe_call(on_error, self)
 | 
											
												
													
														|  | 
 |  | +                return False
 | 
											
												
													
														|  | 
 |  | +            return True
 | 
											
												
													
														|  | 
 |  | +        maybe_call(on_error, self)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      def start(self, env=None, **kwargs):
 |  |      def start(self, env=None, **kwargs):
 | 
											
												
													
														|  |          return self._waitexec(
 |  |          return self._waitexec(
 | 
											
										
											
												
													
														|  | @@ -152,6 +156,9 @@ class Node(object):
 | 
											
												
													
														|  |                  pass
 |  |                  pass
 | 
											
												
													
														|  |          raise KeyError(alt[0])
 |  |          raise KeyError(alt[0])
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    def __repr__(self):
 | 
											
												
													
														|  | 
 |  | +        return '<{name}: {0.name}>'.format(self, name=type(self).__name__)
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      @cached_property
 |  |      @cached_property
 | 
											
												
													
														|  |      def pidfile(self):
 |  |      def pidfile(self):
 | 
											
												
													
														|  |          return self.expander(self.getopt('--pidfile', '-p'))
 |  |          return self.expander(self.getopt('--pidfile', '-p'))
 | 
											
										
											
												
													
														|  | @@ -160,7 +167,7 @@ class Node(object):
 | 
											
												
													
														|  |      def logfile(self):
 |  |      def logfile(self):
 | 
											
												
													
														|  |          return self.expander(self.getopt('--logfile', '-f'))
 |  |          return self.expander(self.getopt('--logfile', '-f'))
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -    @cached_property
 |  | 
 | 
											
												
													
														|  | 
 |  | +    @property
 | 
											
												
													
														|  |      def pid(self):
 |  |      def pid(self):
 | 
											
												
													
														|  |          try:
 |  |          try:
 | 
											
												
													
														|  |              return Pidfile(self.pidfile).read_pid()
 |  |              return Pidfile(self.pidfile).read_pid()
 | 
											
										
											
												
													
														|  | @@ -466,6 +473,12 @@ class Cluster(UserList):
 | 
											
												
													
														|  |              else:
 |  |              else:
 | 
											
												
													
														|  |                  maybe_call(on_down, node)
 |  |                  maybe_call(on_down, node)
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    def __repr__(self):
 | 
											
												
													
														|  | 
 |  | +        return '<{name}({0}): {1}>'.format(
 | 
											
												
													
														|  | 
 |  | +            len(self), saferepr([n.name for n in self]),
 | 
											
												
													
														|  | 
 |  | +            name=type(self).__name__,
 | 
											
												
													
														|  | 
 |  | +        )
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      @cached_property
 |  |      @cached_property
 | 
											
												
													
														|  |      def data(self):
 |  |      def data(self):
 | 
											
												
													
														|  |          return list(self.MultiParser(cmd=self.cmd).parse(self.p))
 |  |          return list(self.MultiParser(cmd=self.cmd).parse(self.p))
 |