import argparse
import mpi4py.MPI
import signac
def action_implementation(job):
def action(*jobs):
if mpi4py.MPI.COMM_WORLD.Get_size() != len(jobs):
message = 'Number of ranks does not match number of directories.'
raise RuntimeError(message)
rank = mpi4py.MPI.COMM_WORLD.Get_rank()
action_implementation(jobs[rank])
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--action', required=True)
parser.add_argument('directories', nargs='+')
args = parser.parse_args()
project = signac.get_project()
jobs = [project.open_job(id=directory) for directory in args.directories]
globals()[args.action](*jobs)