dispatcher.py 文件源码

python
阅读 32 收藏 0 点赞 0 评论 0

项目:PyPlanet 作者: PyPlanet 项目源码 文件源码
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()
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号