def listener(): while 1: # Make sure this thread can't die. try: try: self, sender, kw = _signal_queue.get() except ValueError: log.error('Error unpacking queue item.', exc_info=True) if self is _sentinel: break try: Signal.sync_send(self, sender, **kw) except Exception: log.error('Error calling signal.', exc_info=True) except Exception: # Weird things happen during interpreter shutdown. if log: log.critical('Uncaught error.', exc_info=True)
def async_send(self, sender, **named): # Bail early if no one is listening. if not self.receivers: return [] # Django depends on class_prepared being synchronous. if self is models.signals.class_prepared: return Signal.sync_send(self, sender, **named) _signal_queue.put_nowait((self, sender, named)) return []