Selaa lähdekoodia

Fixed some performance issues

Yentl Van Tendeloo 8 vuotta sitten
vanhempi
commit
33ee3e8a3d
2 muutettua tiedostoa jossa 8 lisäystä ja 2 poistoa
  1. 7 2
      hybrid_server/classes/task.xml
  2. 1 0
      kernel/modelverse_kernel/main.py

+ 7 - 2
hybrid_server/classes/task.xml

@@ -15,6 +15,7 @@
             self.failed = False
             self.output_queue = []
             self.outputs = []
+            self.do_yield = False
             ]]>
         </body>
 
@@ -56,6 +57,7 @@
                             <script>
                                 start_time = time.time()
                                 # Grant each task some milliseconds of execution
+                                self.do_yield = False
                                 while (time.time() - start_time &lt; 0.05):
                                     if not self.execute_modelverse(self.taskname, "execute_rule", []):
                                         # Failed!
@@ -64,6 +66,7 @@
 
                                     if not self.mvk.success:
                                         # Blocking or broken, so quit already to stop wasting CPU
+                                        self.do_yield = True
                                         break
 
                                 if not self.failed:
@@ -83,12 +86,13 @@
 
                         <transition cond="self.failed" target="../../failed"/>
                         <transition after="self.sccd_yield()" target="."/>
-                        <transition cond="not self.mvk.success" target="../yielded"/>
+                        <transition cond="self.do_yield" target="../yielded"/>
                     </state>
 
                     <state id="yielded">
-                        <transition after="self.sccd_yield() + 0.5" target="../executing"/>
+                        <transition after="self.sccd_yield() + 1" target="../executing"/>
                         <transition event="processed_input" target="../executing"/>
+                        <transition event="waiting_output" target="../executing"/>
                     </state>
                 </state>
 
@@ -124,6 +128,7 @@
                         <script>
                             self.output_queue.append(params)
                         </script>
+                        <raise event="waiting_output"/>
                     </transition>
 
                     <transition cond="self.outputs" target=".">

+ 1 - 0
kernel/modelverse_kernel/main.py

@@ -263,6 +263,7 @@ class ModelverseKernel(object):
                                    ("DN", [first_output]),
                                   ]
             self.returnvalue = rv_value
+            self.success = True
 
     def set_input(self, taskname, value):
         task_root, =        yield [("RD", [self.root, taskname])]