mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-04-29 10:17:27 +02:00
[Submitters] WIP : add a slurm submitter
This commit is contained in:
parent
e83bbb9b12
commit
362c9a3023
1 changed files with 84 additions and 0 deletions
84
meshroom/submitters/slurmSubmitter.py
Normal file
84
meshroom/submitters/slurmSubmitter.py
Normal file
|
@ -0,0 +1,84 @@
|
|||
#!/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
|
Loading…
Add table
Reference in a new issue