def run_screens(analyses_to_run, version): ''' Mass run of analyses in screens when saltant is down Args: analyses_to_run (dict): jira tickets sorted by analysis type ''' python_cmd = os.environ.get("HEADNODE_AUTOMATION_PYTHON") run_file = os.path.join(os.environ.get("HEADNODE_AUTOMATION_DIR"), "workflows", "run.py") # FIXME: Find out how to pass command to screen to create new windows # Right now a screen is being created for each analysis -- needs cleanup for analysis_type, ticket_library in analyses_to_run.items(): for ticket in ticket_library: library_id = ticket_library["library"] analysis_screen = screenutils.Screen(ticket, initialize=True) stdout_file = "logs/{}_{}.out".format(ticket, analysis_type) stderr_file = "logs/{}_{}.err".format(ticket, analysis_type) cmd_str = "{} {} {} {} {} --update > {} 2> {}".format( python_cmd, run_file, ticket, version, analysis_type, stdout_file, stderr_file, ) analysis_screen.send_commands(cmd_str)
def SendInScreen( screename, py_file ): s = screenutils.Screen( screename, True ) time.sleep(2) f = open(py_file, "r") old_py_file = f.read() f = open(py_file, "w") f.write(old_py_file) f.write("from screenutils import Screen\n") f.write("s = Screen('{0}')\n".format(screename)) f.write("if s.exists:\n".format(screename)) f.write("\ts.kill()\n".format(screename)) s.send_commands("python {0}".format(py_file)) return s.id
def terminate(self, instance): s = screenutils.Screen(instance.screen_name) if s.exists: s.kill()
def status(self, instance): s = screenutils.Screen(instance.screen_name) return s.exists
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Thu Jan 17 23:18:56 2019 @author: matteo """ import argparse import screenutils as su parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--command', help='Command', type=str, default='echo hello') parser.add_argument('--name', help='Name', type=str, default='hello') parser.add_argument('--nseeds', help='Number of seeds', type=int, default=10) args = parser.parse_args() seeds = [198, 833, 693, 826, 354, 963, 263, 176, 140, 154] for seed in seeds[:args.nseeds]: screen = su.Screen(args.name + '_' + str(seed), create=True) commands = [args.command + ' --seed %d' % seed + ' --name %s' % args.name] screen.send_commands(commands)
parser.add_argument('--cores', type=str, default='44-54') parser.add_argument('--logdir', help='Directory for logs', type=str, default='./logs') parser.add_argument('--env', help='Gym environment id', type=str, default='RBFMinigolf-v0') parser.add_argument('--actor_lr', type=float, default=1.17e-3) parser.add_argument('--critic_lr', type=float, default=2.49e-4) parser.add_argument('--std', type=float, default=0.01) parser.add_argument('--init', type=float, default=1.) parser.add_argument('--horizon', type=int, default=20) parser.add_argument('--gamma', type=float, default=0.99) parser.add_argument('--epochs', type=int, default=700) parser.add_argument('--steps_per_epoch', type=int, default=10000) parser.add_argument('--test', type=int, default=100) parser.add_argument('--expname', type=str, default='minigolf') parser.add_argument('--policy', type=str, default=None) args = parser.parse_args() for seed in args.seeds: screen = su.Screen(args.expname + str(seed), initialize=True) commands = 'conda activate py36 && taskset -ca %s python sp_run.py --seed %d --logdir %s --env %s --actor_lr %f --critic_lr %f --std %f --init %f --horizon %d --gamma %f --epochs %d --steps_per_epoch %d --test %d --expname %s --policy %s' % ( args.cores, seed, args.logdir, args.env, args.actor_lr, args.critic_lr, args.std, args.init, args.horizon, args.gamma, args.epochs, args.steps_per_epoch, args.test, args.expname, args.policy) screen.send_commands(commands)
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Thu Jan 17 23:18:56 2019 @author: matteo """ import argparse import screenutils as su parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter) parser.add_argument('--command', help='Command', type=str, default='echo hello') parser.add_argument('--name', help='Name', type=str, default='hello') parser.add_argument('--nseeds', help='Number of seeds', type=int, default=5) args = parser.parse_args() screen = su.Screen(args.name, create=True) seeds = [507, 160, 649, 144, 233] commands = [args.command + ' --seed %d' % seed + ' --name %s' % args.name for seed in seeds[:args.nseeds]] screen.send_commands(commands)
def ScreenExist(screename): s = screenutils.Screen(screename) return s.exists
def KillScreenSession(screename): s = screenutils.Screen(screename) if s.exists: s.kill()
def OpenScreenSession(screename): s = screenutils.Screen(screename, True) os.system("screen -r {0}".format(s.id))