Пример #1
0
def main(config_file, output_file):
    
    
    with Open(config_file, 'r') as f:
        config = json.load(f)
        
    graph = dict()
    for name, item in config.iteritems():
        graph[name] = [] if "depends" not in item else item['depends']
    
    with Open(output_file, 'w') as f:
        
        f.write('#!/bin/bash\n\n')
        for job in toposort(graph):
            item = config[job]
            param = ['-terse', '-cwd']
                    
            if "depends" in item:
                param.append('-hold_jid')
                param.append(','.join(['$' + x for x in item['depends']]))
            
            if "array" in item:
                param.append('-t')
                assert(len(item['array']) > 0 and len(item['array']) < 4)
                param.append(
                    ''.join([
                        ''.join(x) 
                        for x in zip(['', '-', ':'], map(str, item['array']))
                    ])
                )
            if 'stdout' in item:
                param.append('-o')
                param.append("'{}'".format(item['stdout']))
            if 'stderr' in item:
                param.append('-e')
                param.append("'{}'".format(item['stderr']))
            if "resources" in item:
                assert(len(item['resources']) > 0)
                param.append('-l')
                param.append(','.join([
                    '='.join(x) for x in item['resources'].iteritems()
                ]))
            
            if "params" in item:
                assert(len(item['params']) > 0)
                param.append(' '.join(item['params']))
            query = ("{jobname}=`qsub -N '{name}' {parameters} {command} " + \
                "| sed -e 's/[.].*$//'`").format(
                name=job,
                jobname=job,
                parameters=' '.join(param),
                command=cmd_to_string(item['cmd'])
            )
            f.write(query + '\n')
Пример #2
0
 def test_toposort(self):
     X = toposort(self.G)
     Y = [3, 0, 2, 13, 8, 14, 6, 10, 9, 5, 1, 4, 7, 11, 12]
     self.assertEqual(X, Y, "Topological sort is not working: " + \
                            str(X) + " != " + str(Y))