<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      頭部導入模塊導致循環(huán)依賴問題

      頭部導入模塊導致循環(huán)依賴問題

      1. 不在頭部導入模塊

      比如不使用類型注釋,調(diào)用時候傳入值即可,就可以避免循環(huán)依賴

      2. 推遲傳遞實例

      可以將 CenterHandler 的實例傳遞給 MessageHandler 時,推遲實例的創(chuàng)建或者通過依賴注入的方式進行。這種方法可以通過后期賦值的方式解決循環(huán)依賴問題。

      代碼示例:

      class MessageHandler:
          """ 消息處理類 """
      
          def __init__(self, monitor: Monitor) -> None:
              self.publisher = EventPublisher(monitor)
              self.collection_queue = multiprocessing.Queue()
              self.data_collection = DataCollection(self.collection_queue, monitor.service)
              self.centerhandler = None  # 暫時不保存 centerhandler
      
          def set_centerhandler(self, centerhandler: CenterHandler) -> None:
              """ 設(shè)置 CenterHandler 實例 """
              self.centerhandler = centerhandler
      
          def process_message(self, message: str) -> None:
              if self.centerhandler:
                  # 在需要使用 CenterHandler 時再訪問它
                  print(f"Processing message with leader address: {self.centerhandler._leader_addr}")
              else:
                  print("CenterHandler not set yet.")
      
      class CenterHandler(object):
          """ CenterHandler類:負責處理與center有關(guān)的操作 """
      
          def __init__(self, center: Center, monitor: Monitor, heartbeat_interval: int = 5) -> None:
              self._center = center
              self._zmq = center.zmq
              self._leader_addr = center.leader_addr
              self._addr_to_socket = center.addr_to_socket
              self.messagehandler = MessageHandler(monitor)  # 創(chuàng)建時不傳入 CenterHandler 實例
              self.messagehandler.set_centerhandler(self)  # 后期傳入 CenterHandler 實例
      

      解釋:

      • MessageHandler 類中,創(chuàng)建時不傳入 CenterHandler 實例,而是通過一個 set_centerhandler 方法在后期傳入 CenterHandler 實例。
      • 這樣就避免了循環(huán)依賴,只有在 CenterHandler 的實例已經(jīng)創(chuàng)建后,才能將其傳遞給 MessageHandler

      3. 使用事件或回調(diào)機制

      另一種方法是通過回調(diào)函數(shù)或事件機制,讓 MessageHandlerCenterHandler 不直接依賴對方的實例,而是通過一個外部的控制流程進行協(xié)作。

      代碼示例:

      class MessageHandler:
          """ 消息處理類 """
      
          def __init__(self, monitor: Monitor, on_event: Callable) -> None:
              self.publisher = EventPublisher(monitor)
              self.collection_queue = multiprocessing.Queue()
              self.data_collection = DataCollection(self.collection_queue, monitor.service)
              self.on_event = on_event  # 用于事件處理的回調(diào)
      
          def process_message(self, message: str) -> None:
              # 調(diào)用回調(diào)函數(shù)來通知事件
              self.on_event(message)
      
      class CenterHandler(object):
          """ CenterHandler類:負責處理與center有關(guān)的操作 """
      
          def __init__(self, center: Center, monitor: Monitor, heartbeat_interval: int = 5) -> None:
              self._center = center
              self._zmq = center.zmq
              self._leader_addr = center.leader_addr
              self._addr_to_socket = center.addr_to_socket
              self.messagehandler = MessageHandler(monitor, self.handle_event)
      
          def handle_event(self, message: str) -> None:
              """ 用于處理消息事件的回調(diào)函數(shù) """
              print(f"CenterHandler handling message: {message}")
      

      解釋:

      • 在這個設(shè)計中,MessageHandler 類不再直接依賴 CenterHandler 的實例,而是通過回調(diào)函數(shù)來通知 CenterHandler
      • CenterHandler 在初始化時,將自己的 handle_event 方法傳遞給 MessageHandler,并在需要時由 MessageHandler 調(diào)用該方法。

      4. 使用容器或管理器類

      通過創(chuàng)建一個管理兩個類關(guān)系的外部容器類,來管理這些實例之間的關(guān)系,從而避免它們直接相互依賴。

      class HandlerContainer:
          """ 管理 MessageHandler 和 CenterHandler 的關(guān)系 """
      
          def __init__(self, center: Center, monitor: Monitor) -> None:
              self.centerhandler = CenterHandler(center, monitor)
              self.messagehandler = MessageHandler(monitor)
              # 在容器類中設(shè)置兩者之間的關(guān)系
              self.messagehandler.set_centerhandler(self.centerhandler)
      
      # 使用容器類來管理依賴
      container = HandlerContainer(center, monitor)
      

      解釋:

      • HandlerContainer 類作為一個外部的管理者,負責初始化并設(shè)置 CenterHandlerMessageHandler 的關(guān)系。
      • 通過這種方式,MessageHandlerCenterHandler 之間不直接相互依賴,從而避免了循環(huán)依賴。
      posted @ 2025-04-03 16:29  零の守墓人  閱讀(19)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 双乳奶水饱满少妇呻吟免费看| 忘忧草在线社区www中国中文| 日韩av在线一区二区三区| 熟女蜜臀av麻豆一区二区| 麻豆精品久久久久久久99蜜桃| 亚洲中文字幕国产精品| 亚洲av无码牛牛影视在线二区| 好男人好资源WWW社区| 亚洲三区在线观看无套内射| 国内少妇偷人精品免费| 天堂中文8资源在线8| 国产高清在线a视频大全| 亚洲性一交一乱一伦视频| 精品九九人人做人人爱| 人妻少妇乱子伦精品无码专区电影| 亚洲精品国产综合麻豆久久99| 久久精品第九区免费观看| 午夜福利片1000无码免费| 在线观看特色大片免费网站| 久久精品久久电影免费理论片| 日韩人妻无码精品无码中文字幕| 视频一区视频二区在线视频| 亚洲精品一二三在线观看| 国产成人精品三级麻豆| 亚洲欧美牲交| 日本边添边摸边做边爱| 性久久久久久| 激情综合色区网激情五月| 377P欧洲日本亚洲大胆| 汝南县| 国产成人精品视频网站| 乱码精品一区二区三区| 亚洲欧洲精品日韩av| 最新精品露脸国产在线| 日本丰满少妇高潮呻吟| 亚洲综合色婷婷中文字幕| 国产成人综合网亚洲第一| 国产男女猛烈无遮挡免费视频网址| 国产欧美日韩免费看AⅤ视频| 91精品蜜臀国产综合久久| 亚洲av无码片在线播放|