Ver Fonte

fix unnecessary duplicate build pp_predictor

gaotingquan há 1 ano atrás
pai
commit
b312059146

+ 6 - 4
paddlex/inference/components/paddle_predictor/predictor.py

@@ -41,8 +41,7 @@ class BasePaddlePredictor(BaseComponent):
             if self.option and option == self.option:
                 return
             self._option = option
-            self._option.attach(self)
-            self.reset()
+            self._reset()
 
     @property
     def option(self):
@@ -52,9 +51,10 @@ class BasePaddlePredictor(BaseComponent):
     def option(self, option):
         self._update_option(option)
 
-    def reset(self):
+    def _reset(self):
         if not self.option:
             self.option = PaddlePredictorOption()
+        logging.debug(f"Env: {self.option}")
         (
             self.predictor,
             self.inference_config,
@@ -62,7 +62,7 @@ class BasePaddlePredictor(BaseComponent):
             self.input_handlers,
             self.output_handlers,
         ) = self._create()
-        logging.debug(f"Env: {self.option}")
+        self.option.changed = False
 
     def _create(self):
         """_create"""
@@ -168,6 +168,8 @@ No need to generate again."
         return self.input_names
 
     def apply(self, **kwargs):
+        if self.option.changed:
+            self._reset()
         x = self.to_batch(**kwargs)
         for idx in range(len(x)):
             self.input_handlers[idx].reshape(x[idx].shape)

+ 11 - 16
paddlex/inference/utils/pp_option.py

@@ -34,8 +34,17 @@ class PaddlePredictorOption(object):
         super().__init__()
         self.model_name = model_name
         self._cfg = {}
-        self._observers = []
         self._init_option(**kwargs)
+        self._changed = False
+
+    @property
+    def changed(self):
+        return self._changed
+
+    @changed.setter
+    def changed(self, v):
+        assert isinstance(v, bool)
+        self._changed = v
 
     def _init_option(self, **kwargs):
         for k, v in kwargs.items():
@@ -67,7 +76,7 @@ class PaddlePredictorOption(object):
 
     def _update(self, k, v):
         self._cfg[k] = v
-        self.notify()
+        self.changed = True
 
     @property
     def run_mode(self):
@@ -219,17 +228,3 @@ class PaddlePredictorOption(object):
             for name, prop in vars(self.__class__).items()
             if isinstance(prop, property) and prop.fset is not None
         ]
-
-    def attach(self, observer):
-        if observer not in self._observers:
-            self._observers.append(observer)
-
-    def detach(self, observer):
-        try:
-            self._observers.remove(observer)
-        except ValueError:
-            pass
-
-    def notify(self):
-        for observer in self._observers:
-            observer.reset()