import argparse
import multiprocessing
import os
import signac
def action_implementation(job):
def action(*jobs):
processes = int(os.environ.get('ACTION_THREADS_PER_PROCESS', multiprocessing.cpu_count()))
if hasattr(os, 'sched_getaffinity'):
processes = len(os.sched_getaffinity(0))
with multiprocessing.Pool(processes=processes) as p:
p.map(action_implementation, jobs)
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)