当前位置: 首页 > 后端技术 > Python

nameko的内联绑定与依赖解读

时间:2023-03-26 17:11:08 Python

下面的代码示例是典型的nameko示例类AddService:name='add_service'dispatcher=EventDispatcher()@event_handler('hi_api','rubbish')defreceive(self,message:str):self.dispatcher('to_download',message)你有没有想过dispatcher=EventDispatcher()是如何获取amqp_uri和connection的信息的?用你光秃秃的脑袋想一想,是不是很神奇,是不是很震撼?因为没有任务的“继承”,它是如何实现的呢?看标题就知道肯定和nameko的Dependency这个概念有关。懒得多说了,看源码帮你节省时间,先贴几个关键源码来看看EventDispatcher的继承关系,理清脉络从图中我们可以看出EventDispatcher是DependencyProvider的子类,一切的关键就是DependencyProvider。我们看一下DependencyProvider的源码site-packages/nameko/containers.pyclassServiceContainer(object):def__init__(self,service_cls,config):self.service_cls=service_clsself.config=configself.service_name=get_service_name(service_cls)self.shared_extensions={}self.max_workers=(config.get(MAX_WORKERS_CONFIG_KEY)orDEFAULT_MAX_WORKERS)self.serializer,self.accept=_managed_threads={}self._being_killed=Falseself._died=Event()关键是这部分forattr_name,dependencyininspect.getmembers(service_cls,is_dependency):bound=dependency.bind(self.interface,attr_name)self.dependencies。添加(绑定)self.subextensions.update(iter_extensions(绑定))