浏览代码

Try to fix execute_AL

Yentl Van Tendeloo 7 年之前
父节点
当前提交
96c8704196
共有 4 个文件被更改,包括 42 次插入25 次删除
  1. 1 1
      interface/PDEVS/console.py
  2. 20 12
      interface/PDEVS/modelverse.py
  3. 1 0
      kernel/modelverse_kernel/main.py
  4. 20 12
      wrappers/modelverse.py

+ 1 - 1
interface/PDEVS/console.py

@@ -83,7 +83,7 @@ def start_pypdevs_client(conn):
     controller = Controller()
     
     print("Starting PyPDEVS client...")
-    transformation_execute_AL("models/paralleldevs_simulator", {"MyString": "models/example_PS_DEVS_String"}, {})
+    transformation_execute_AL("models/paralleldevs_simulator", {"MyString": "models/example_PS_DEVS_String"}, {}, fetch_output=False)
         
 if __name__ == '__main__':
     freeze_support()    

+ 20 - 12
interface/PDEVS/modelverse.py

@@ -520,7 +520,7 @@ def transformation_add_MANUAL(source_metamodels, target_metamodels, operation_na
 
     _handle_output("Success")
 
-def transformation_execute_AL(operation_name, input_models_dict, output_models_dict, statechart=None, tracability_model=""):
+def transformation_execute_AL(operation_name, input_models_dict, output_models_dict, statechart=None, tracability_model="", fetch_output=True):
     """Execute an existing model operation."""
     global mode
     _goto_mode(MODE_MODELLING)
@@ -539,12 +539,16 @@ def transformation_execute_AL(operation_name, input_models_dict, output_models_d
         return None
     else:
         # No statechart associated, so just wait until we are finished
-        while _output() not in ["Success", "Failure"]:
-            pass
-        if _last_output() == "Success":
-            return True
+        if fetch_output:
+            while _output() not in ["Success", "Failure"]:
+                pass
+            if _last_output() == "Success":
+                return True
+            else:
+                return False
         else:
-            return False
+            while 1:
+                time.sleep(1.0)
 
 def transformation_execute_MANUAL(operation_name, input_models_dict, output_models_dict, callback=lambda i: None):
     """Execute an existing model operation."""
@@ -573,7 +577,7 @@ def transformation_execute_MANUAL(operation_name, input_models_dict, output_mode
     else:
         return False
 
-def transformation_execute_MT(operation_name, input_models_dict, output_models_dict, statechart=None, tracability_model=""):
+def transformation_execute_MT(operation_name, input_models_dict, output_models_dict, statechart=None, tracability_model="", fetch_output=True):
     """Execute an existing model operation."""
     global mode
     _goto_mode(MODE_MODELLING)
@@ -592,12 +596,16 @@ def transformation_execute_MT(operation_name, input_models_dict, output_models_d
         return None
     else:
         # No statechart associated, so just wait until we are finished
-        while _output() not in ["Success", "Failure"]:
-            pass
-        if _last_output() == "Success":
-            return True
+        if fetch_output:
+            while _output() not in ["Success", "Failure"]:
+                pass
+            if _last_output() == "Success":
+                return True
+            else:
+                return False
         else:
-            return False
+            while 1:
+                time.sleep(1.0)
 
 def transformation_list():
     """List existing model operations."""

+ 1 - 0
kernel/modelverse_kernel/main.py

@@ -257,6 +257,7 @@ class ModelverseKernel(object):
                                    ("CD", [task_root, "output", next_output]),
                                    ("DN", [first_output]),
                                   ]
+            print("Someone read output of taskname %s for value %s" % (taskname, rv_value))
 
             self.returnvalue = rv_value
             self.success = True

+ 20 - 12
wrappers/modelverse.py

@@ -520,7 +520,7 @@ def transformation_add_MANUAL(source_metamodels, target_metamodels, operation_na
 
     _handle_output("Success")
 
-def transformation_execute_AL(operation_name, input_models_dict, output_models_dict, statechart=None, tracability_model=""):
+def transformation_execute_AL(operation_name, input_models_dict, output_models_dict, statechart=None, tracability_model="", fetch_output=True):
     """Execute an existing model operation."""
     global mode
     _goto_mode(MODE_MODELLING)
@@ -539,12 +539,16 @@ def transformation_execute_AL(operation_name, input_models_dict, output_models_d
         return None
     else:
         # No statechart associated, so just wait until we are finished
-        while _output() not in ["Success", "Failure"]:
-            pass
-        if _last_output() == "Success":
-            return True
+        if fetch_output:
+            while _output() not in ["Success", "Failure"]:
+                pass
+            if _last_output() == "Success":
+                return True
+            else:
+                return False
         else:
-            return False
+            while 1:
+                time.sleep(1.0)
 
 def transformation_execute_MANUAL(operation_name, input_models_dict, output_models_dict, callback=lambda i: None):
     """Execute an existing model operation."""
@@ -573,7 +577,7 @@ def transformation_execute_MANUAL(operation_name, input_models_dict, output_mode
     else:
         return False
 
-def transformation_execute_MT(operation_name, input_models_dict, output_models_dict, statechart=None, tracability_model=""):
+def transformation_execute_MT(operation_name, input_models_dict, output_models_dict, statechart=None, tracability_model="", fetch_output=True):
     """Execute an existing model operation."""
     global mode
     _goto_mode(MODE_MODELLING)
@@ -592,12 +596,16 @@ def transformation_execute_MT(operation_name, input_models_dict, output_models_d
         return None
     else:
         # No statechart associated, so just wait until we are finished
-        while _output() not in ["Success", "Failure"]:
-            pass
-        if _last_output() == "Success":
-            return True
+        if fetch_output:
+            while _output() not in ["Success", "Failure"]:
+                pass
+            if _last_output() == "Success":
+                return True
+            else:
+                return False
         else:
-            return False
+            while 1:
+                time.sleep(1.0)
 
 def transformation_list():
     """List existing model operations."""