| import os |
| import importlib |
|
|
|
|
| def find_launcher_using_name(launcher_name): |
| |
| |
| launcher_filename = "experiments.{}_launcher".format(launcher_name) |
| launcherlib = importlib.import_module(launcher_filename) |
|
|
| |
| |
| |
| launcher = None |
| target_launcher_name = launcher_name.replace('_', '') + 'launcher' |
| for name, cls in launcherlib.__dict__.items(): |
| if name.lower() == target_launcher_name.lower(): |
| launcher = cls |
|
|
| if launcher is None: |
| raise ValueError("In %s.py, there should be a subclass of BaseLauncher " |
| "with class name that matches %s in lowercase." % |
| (launcher_filename, target_launcher_name)) |
|
|
| return launcher |
|
|
|
|
| if __name__ == "__main__": |
| import sys |
| import pickle |
|
|
| assert len(sys.argv) >= 3 |
|
|
| name = sys.argv[1] |
| Launcher = find_launcher_using_name(name) |
|
|
| cache = "/tmp/tmux_launcher/{}".format(name) |
| if os.path.isfile(cache): |
| instance = pickle.load(open(cache, 'r')) |
| else: |
| instance = Launcher() |
|
|
| cmd = sys.argv[2] |
| if cmd == "launch": |
| instance.launch() |
| elif cmd == "stop": |
| instance.stop() |
| elif cmd == "send": |
| expid = int(sys.argv[3]) |
| cmd = int(sys.argv[4]) |
| instance.send_command(expid, cmd) |
|
|
| os.makedirs("/tmp/tmux_launcher/", exist_ok=True) |
| pickle.dump(instance, open(cache, 'w')) |
|
|