|
@@ -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 < 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=".">
|