diff --git a/artiq/frontend/artiq_run.py b/artiq/frontend/artiq_run.py index f982dff1b..76f2cbc4b 100755 --- a/artiq/frontend/artiq_run.py +++ b/artiq/frontend/artiq_run.py @@ -118,7 +118,8 @@ def main(): if args.arguments: print("Run arguments are not supported in ELF mode") sys.exit(1) - exp_inst = ELFRunner(dps) + exp_inst = ELFRunner(dbh) + rdb.build() exp_inst.run(args.file) else: module = file_import(args.file) @@ -159,6 +160,7 @@ def main(): scheduler=DummyScheduler(), run_params=run_params, **run_params["arguments"]) + rdb.build() exp_inst.run() exp_inst.analyze() diff --git a/artiq/language/db.py b/artiq/language/db.py index 117a23835..16f0fb4a5 100644 --- a/artiq/language/db.py +++ b/artiq/language/db.py @@ -83,7 +83,7 @@ class AutoDB: object.__setattr__(self, k, dev) self.build() if self.dbh is not None: - self.dbh.init_results(self.realtime_results) + self.dbh.add_rt_results(self.realtime_results) def __getattr__(self, name): ak = getattr(self.DBKeys, name) diff --git a/artiq/master/worker_db.py b/artiq/master/worker_db.py index 98e40e62f..10037d457 100644 --- a/artiq/master/worker_db.py +++ b/artiq/master/worker_db.py @@ -10,13 +10,18 @@ class ResultDB: def __init__(self, init_rt_results, update_rt_results): self.init_rt_results = init_rt_results self.update_rt_results = update_rt_results + self.rtr_description = dict() - def init(self, rtr_description): - assert not hasattr(self, "realtime_data") - assert not hasattr(self, "data") + def add_rt_results(self, rtr_description): + intr = set(self.rtr_description.keys()).intersection( + set(rtr_description.keys())) + if intr: + raise ValueError("Duplicate realtime results: " + ", ".join(intr)) + self.rtr_description.update(rtr_description) + def build(self): realtime_results_set = set() - for rtr in rtr_description.keys(): + for rtr in self.rtr_description.keys(): if isinstance(rtr, tuple): for e in rtr: realtime_results_set.add(e) @@ -26,7 +31,7 @@ class ResultDB: self.realtime_data = Notifier({x: [] for x in realtime_results_set}) self.data = Notifier(dict()) - self.init_rt_results(rtr_description) + self.init_rt_results(self.rtr_description) self.realtime_data.publish = lambda notifier, data: \ self.update_rt_results(data) @@ -83,7 +88,7 @@ class DBHub: self.get_parameter = pdb.request self.set_parameter = pdb.set - self.init_results = rdb.init + self.add_rt_results = rdb.add_rt_results self.get_result = rdb.request self.set_result = rdb.set diff --git a/artiq/master/worker_impl.py b/artiq/master/worker_impl.py index f428093a4..aa788a2f1 100644 --- a/artiq/master/worker_impl.py +++ b/artiq/master/worker_impl.py @@ -112,6 +112,7 @@ def main(): scheduler=Scheduler, run_params=run_params, **run_params["arguments"]) + rdb.build() put_object({"action": "completed"}) elif action == "run": exp_inst.run()