mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-30 02:37:26 +02:00
84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
#!/usr/bin/env python
|
|
# coding:utf-8
|
|
|
|
import os
|
|
import json
|
|
|
|
|
|
from meshroom.core.desc import Level
|
|
from meshroom.core.submitter import BaseSubmitter
|
|
|
|
currentDir = os.path.dirname(os.path.realpath(__file__))
|
|
binDir = os.path.dirname(os.path.dirname(os.path.dirname(currentDir)))
|
|
|
|
class Vertex:
|
|
|
|
def __init__(self, node):
|
|
self.pid = -1
|
|
self.node = node
|
|
self.depends = list()
|
|
|
|
class SlurmSubmitter(BaseSubmitter):
|
|
|
|
def __init__(self, parent=None):
|
|
super(SlurmSubmitter, self).__init__(name='Slurm', parent=parent)
|
|
self.vertices = list()
|
|
self.verticesByNode = dict()
|
|
|
|
def start(self, node):
|
|
|
|
nbFrames = node.size
|
|
arguments = {}
|
|
parallelArgs = ''
|
|
print('node: ', node.name)
|
|
if node.isParallelized:
|
|
pass
|
|
#blockSize, fullSize, nbBlocks = node.nodeDesc.parallelization.getSizes(node)
|
|
#parallelArgs = ' --iteration @start'
|
|
#arguments.update({'start': 0, 'end': nbBlocks - 1, 'step': 1})
|
|
|
|
#command='{exe} --node {nodeName} "{meshroomFile}" {parallelArgs} --extern'.format(exe='meshroom_compute', nodeName=node.name, meshroomFile=meshroomFile, parallelArgs=parallelArgs),
|
|
|
|
def submit(self, nodes, edges, filepath):
|
|
|
|
#build a list of nodes with dependencies
|
|
for item in nodes:
|
|
v = Vertex(item)
|
|
self.vertices.append(v)
|
|
self.verticesByNode[item] = v
|
|
|
|
#set dependencies
|
|
for edge in edges:
|
|
node = self.verticesByNode[edge[0]]
|
|
dependency = self.verticesByNode[edge[1]]
|
|
node.depends.append(dependency)
|
|
|
|
#While all the graph is not submitted
|
|
while True:
|
|
|
|
#Try to find a node with all its dependencies submitted
|
|
somethingFound = False
|
|
|
|
for vertex in self.vertices:
|
|
|
|
#check if vertex was already launched
|
|
if vertex.pid >= 0:
|
|
continue
|
|
|
|
#check That all dependency were launched
|
|
valid = True
|
|
for dependency in vertex.depends:
|
|
if dependency.pid < 0:
|
|
valid = False
|
|
break
|
|
|
|
#launch
|
|
if valid:
|
|
vertex.pid = 1
|
|
self.start(vertex.node)
|
|
somethingFound = True
|
|
|
|
if somethingFound == False:
|
|
break
|
|
|
|
return True
|