Source code for labblouin.psub
#!/usr/bin/env python
''' Run as many of a input set of jobs/commands as there are cores at any given time (i.e. emulate a queue such as qsub present on GRID-powered hardware). '''
# Date: Oct 2 2014
# Author: Alex Safatli
# E-mail: safatli@cs.dal.ca
import sys, os
from multiprocessing.pool import Pool
# A function to call on a worker.
[docs]def call(instr):
os.system(instr)
if __name__ == '__main__':
# Get input.
if len(sys.argv) != 3:
print 'Usage: %s file_with_instructions num_cores' % (sys.argv[0])
sys.exit(2)
fnst = sys.argv[1]
ncrs = int(sys.argv[2])
# Read all instructions.
cmds = []
o = open(fnst,'r')
for line in o: cmds.append(line.strip('\n'))
o.close()
# Run jobs.
if ncrs > os.cpu_count(): ncrs = os.cpu_count()
pool = Pool(ncrs)
results = [pool.apply_async(call,(cmd,)) for cmd in cmds]
pool.close()
for _ in results: _.get()