def register(self, receiver, weak=True, dispatch_uid=None):
"""
Connect receiver to sender for signal.
:param receiver: A function or an instance method which is to receive signals. Receivers must be hashable objects.
If weak is True, then receiver must be weak referenceable.Receivers must be able to accept keyword arguments.
If a receiver is connected with a dispatch_uid argument, it
will not be added if another receiver was already connected with that dispatch_uid.
:param weak: Whether to use weak references to the receiver. By default, the
module will attempt to use weak references to the receiver
objects. If this parameter is false, then strong references will
be used.
:param dispatch_uid: An identifier used to uniquely identify a particular instance of
a receiver. This will usually be a string, though it may be anything hashable.
"""
if dispatch_uid:
lookup_key = dispatch_uid
else:
lookup_key = _make_id(receiver)
if weak:
ref = weakref.ref
receiver_object = receiver
# Check for bound methods.
if hasattr(receiver, '__self__') and hasattr(receiver, '__func__'):
ref = weakref.WeakMethod
receiver_object = receiver.__self__
receiver = ref(receiver)
weakref.finalize(receiver_object, self._remove_receiver)
with self.lock:
self._clear_dead_receivers()
for rec_key in self.receivers:
if rec_key == lookup_key:
break
else:
self.receivers.append((lookup_key, receiver))
self.sender_receivers_cache.clear()
评论列表
文章目录