dispatcher.py 文件源码

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

项目:PyPlanet 作者: PyPlanet 项目源码 文件源码
def _live_receivers(self):
        """
        Filter sequence of receivers to get resolved, live receivers.
        This checks for weak references and resolves them, then returning only
        live receivers.
        """
        # We don't use the sender. Set it to none.
        sender = None

        receivers = None
        if self.use_caching and not self._dead_receivers:
            receivers = self.sender_receivers_cache.get(sender)
            # We could end up here with NO_RECEIVERS even if we do check this case in
            # .send() prior to calling _live_receivers() due to concurrent .send() call.
            if receivers is NO_RECEIVERS:
                return []

        if receivers is None:
            with self.lock:
                self._clear_dead_receivers()
                receivers = []
                for receiverkey, receiver in self.receivers:
                    receivers.append((receiverkey, receiver))
                if self.use_caching:
                    if not receivers:
                        self.sender_receivers_cache[sender] = NO_RECEIVERS
                    else:
                        # Note, we must cache the weakref versions.
                        self.sender_receivers_cache[sender] = receivers
        non_weak_receivers = []

        for receiver in receivers:
            key = receiver[0]
            receiver = receiver[1]

            if isinstance(receiver, weakref.ReferenceType):
                # Dereference the weak reference.
                receiver = receiver()
                if receiver is not None:
                    non_weak_receivers.append((key, receiver))
            else:
                non_weak_receivers.append((key, receiver))
        return non_weak_receivers
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号