taiga代码研究--base--collections

collections.MutableSet

内置的commections有:

 

__all__ = ['deque', 'defaultdict', 'namedtuple', 'UserDict', 'UserList',
'UserString', 'Counter', 'OrderedDict', 'ChainMap']

 

以下是taiga自定义的collections:  顺序链表

 

import collections


class OrderedSet(collections.MutableSet):
    # Extract from:
    #     - https://docs.python.org/3/library/collections.abc.html?highlight=orderedset
    #     - https://code.activestate.com/recipes/576694/
    def __init__(self, iterable=None):
        self.end = end = []
        end += [None, end, end]         # sentinel node for doubly linked list
        self.map = {}                   # key --> [key, prev, next]
        if iterable is not None:
            self |= iterable

    def __len__(self):
        return len(self.map)

    def __contains__(self, key):
        return key in self.map

    def add(self, key):
        if key not in self.map:
            end = self.end
            curr = end[1]
            curr[2] = end[1] = self.map[key] = [key, curr, end]

    def discard(self, key):
        if key in self.map:
            key, prev, next = self.map.pop(key)
            prev[2] = next
            next[1] = prev

    def __iter__(self):
        end = self.end
        curr = end[2]
        while curr is not end:
            yield curr[0]
            curr = curr[2]

    def __reversed__(self):
        end = self.end
        curr = end[1]
        while curr is not end:
            yield curr[0]
            curr = curr[1]

    def pop(self, last=True):
        if not self:
            raise KeyError('set is empty')
        key = self.end[1][0] if last else self.end[2][0]
        self.discard(key)
        return key

    def __repr__(self):
        if not self:
            return '%s()' % (self.__class__.__name__,)
        return '%s(%r)' % (self.__class__.__name__, list(self))

    def __eq__(self, other):
        if isinstance(other, OrderedSet):
            return len(self) == len(other) and list(self) == list(other)
        return set(self) == set(other)

 

调用:

 

父类: 

class MutableSet(Set):
    """A mutable set is a finite, iterable container.

    This class provides concrete generic implementations of all
    methods except for __contains__, __iter__, __len__,
    add(), and discard().

    To override the comparisons (presumably for speed, as the
    semantics are fixed), all you have to do is redefine __le__ and
    then the other operations will automatically follow suit.
    """

    __slots__ = ()

    @abstractmethod
    def add(self, value):
        """Add an element."""
        raise NotImplementedError

    @abstractmethod
    def discard(self, value):
        """Remove an element.  Do not raise an exception if absent."""
        raise NotImplementedError

    def remove(self, value):
        """Remove an element. If not a member, raise a KeyError."""
        if value not in self:
            raise KeyError(value)
        self.discard(value)

    def pop(self):
        """Return the popped value.  Raise KeyError if empty."""
        it = iter(self)
        try:
            value = next(it)
        except StopIteration:
            raise KeyError
        self.discard(value)
        return value

    def clear(self):
        """This is slow (creates N new iterators!) but effective."""
        try:
            while True:
                self.pop()
        except KeyError:
            pass

    def __ior__(self, it):
        for value in it:
            self.add(value)
        return self

    def __iand__(self, it):
        for value in (self - it):
            self.discard(value)
        return self

    def __ixor__(self, it):
        if it is self:
            self.clear()
        else:
            if not isinstance(it, Set):
                it = self._from_iterable(it)
            for value in it:
                if value in self:
                    self.discard(value)
                else:
                    self.add(value)
        return self

    def __isub__(self, it):
        if it is self:
            self.clear()
        else:
            for value in it:
                self.discard(value)
        return self

MutableSet.register(set)

 

转载于:https://www.cnblogs.com/bayueman/articles/6631762.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Taiga Kubernetes是一个开源的容器编排工具,最初由Google公司发布,后来由Cloud Native Computing Foundation(CNCF)进行维护和发展。Taiga Kubernetes致力于构建和管理容器化应用程序的自动化工具,它可以帮助用户在大规模的集群中快速而可靠地部署、扩展和管理应用程序。 Taiga Kubernetes采用了一种高度可扩展的架构,能够自动执行负载均衡、故障检测、自愈和自动扩容。它通过抽象层来隐藏底层的基础设施细节,让用户能够更专注于应用程序本身而不是基础设施管理。Taiga Kubernetes提供了丰富的API和命令行工具,帮助用户进行各种操作,比如部署应用程序、扩展应用程序、回滚版本、管理配置等,而这些操作都可以通过脚本编写来实现自动化。 Taiga Kubernetes还支持多云环境,用户可以在不同的云平台上部署和运行Taiga Kubernetes集群,从而实现跨云的部署和应用迁移。此外,Taiga Kubernetes还提供了面向企业级用户的高级特性,比如RBAC(基于角色的访问控制)、网络策略、安全审计等,帮助用户更好地管理和保护集群中的应用程序。 总之,Taiga Kubernetes是一个强大而灵活的容器编排工具,它有助于简化容器化应用程序的部署和管理,提高应用程序的可靠性和可扩展性,为用户提供了丰富的功能和选择,使其成为目前最受欢迎的容器编排工具之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值