'Create a new signal.
providing_args
A list of the arguments this signal can pass along in a send() call.'

def __init__(self, providing_args=None, use_caching=False):

    self.receivers = []
    if (providing_args is None):
        providing_args = []
    self.providing_args = set(providing_args)
    self.lock = threading.Lock()
    self.use_caching = use_caching
    self.sender_receivers_cache = (weakref.WeakKeyDictionary() if use_caching else {})
    self._dead_receivers = False
