|
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')) |
|
|