code: def send(self, sender, **named):
          
          responses = []
          if not self.receivers or self.sender_receivers_cache.get(sender) is NO_RECEIVERS:
              return responses
  
          for receiver in self._live_receivers(sender):
              response = receiver(signal=self, sender=sender, **named)
              responses.append((receiver, response))
          return responses
docs: Send signal from sender to all connected receivers.
  
          If any receiver raises an error, the error propagates back through send,
          terminating the dispatch loop. So it's possible that all receivers
          won't be called if an error is raised.
  
          Arguments:
  
              sender
                  The sender of the signal. Either a specific object or None.
  
              named
                  Named arguments which will be passed to receivers.
  
          Returns a list of tuple pairs [(receiver, response), ... ].