[ui] Graph: stop and cancel node computation

This commit is contained in:
Julien-Haudegond 2020-08-20 16:20:55 +02:00
parent b71832ebbd
commit f41565f26b
2 changed files with 45 additions and 0 deletions

View file

@ -389,6 +389,37 @@ class UIGraph(QObject):
self._taskManager._thread.join() self._taskManager._thread.join()
self.computeStatusChanged.emit() self.computeStatusChanged.emit()
@Slot(Node)
def stopNodeComputation(self, node):
""" Stop the computation of the node and update all the nodes depending on it. """
if not self.isComputingLocally():
return
# Stop the node and wait Task Manager
node.stopComputation()
self._taskManager._thread.join()
# If some dependent nodes are submitted, the first one will be in error
# Make sure to remove those nodes from the Task Manager list
dependentNodes = self._graph.nodesDependingOnNode(node)
for node in dependentNodes[1:]: # exclude current node
if node.getGlobalStatus() == Status.ERROR:
node.upgradeStatusTo(Status.NONE)
self._taskManager.removeNode(node)
self.computeStatusChanged.emit()
@Slot(Node)
def cancelNodeComputation(self, node):
""" Cancel the computation of the node and all the nodes depending on it. """
if node.getGlobalStatus() == Status.SUBMITTED:
# Current node belongs to this list
for node in self._graph.nodesDependingOnNode(node):
# Status from SUBMITTED to NONE
node.clearSubmittedChunks()
# Make sure to remove the node from the Task Manager list
self._taskManager.removeNode(node)
@Slot(Node) @Slot(Node)
def submit(self, node=None): def submit(self, node=None):
""" Submit the graph to the default Submitter. """ Submit the graph to the default Submitter.

View file

@ -289,6 +289,20 @@ Item {
height: visible ? implicitHeight : 0 height: visible ? implicitHeight : 0
onTriggered: submitRequest(nodeMenu.currentNode) onTriggered: submitRequest(nodeMenu.currentNode)
} }
MenuItem {
text: "Stop Computation"
enabled: nodeMenu.currentNode ? nodeMenu.currentNode.globalStatus === "RUNNING" && nodeMenu.currentNode.globalExecMode === "LOCAL" : false
visible: enabled
height: visible ? implicitHeight : 0
onTriggered: uigraph.stopNodeComputation(nodeMenu.currentNode)
}
MenuItem {
text: "Cancel Computation"
enabled: nodeMenu.currentNode ? nodeMenu.currentNode.globalStatus === "SUBMITTED" && nodeMenu.currentNode.globalExecMode === "LOCAL" : false
visible: enabled
height: visible ? implicitHeight : 0
onTriggered: uigraph.cancelNodeComputation(nodeMenu.currentNode)
}
MenuItem { MenuItem {
text: "Open Folder" text: "Open Folder"
onTriggered: Qt.openUrlExternally(Filepath.stringToUrl(nodeMenu.currentNode.internalFolder)) onTriggered: Qt.openUrlExternally(Filepath.stringToUrl(nodeMenu.currentNode.internalFolder))