예제 #1
0
파일: scheduler.py 프로젝트: awantae/artiq
 def __init__(self, worker_handlers):
     self.worker = Worker(worker_handlers)
     self.next_rid = 0
     self.queue = Notifier([])
     self.queue_modified = asyncio.Event()
     self.timed = Notifier(dict())
     self.timed_modified = asyncio.Event()
예제 #2
0
    def __init__(self, repo_backend, worker_handlers):
        self.repo_backend = repo_backend
        self.worker_handlers = worker_handlers

        self.cur_rev = self.repo_backend.get_head_rev()
        self.repo_backend.request_rev(self.cur_rev)
        self.explist = Notifier(dict())
        self._scanning = False

        self.status = Notifier({"scanning": False, "cur_rev": self.cur_rev})
예제 #3
0
    def __init__(self, ddb):
        self._broadcaster = Notifier(dict())
        self.local = dict()
        self.archive = dict()

        self.ddb = ddb
        self._broadcaster.publish = ddb.update
예제 #4
0
def main():
    args = get_argparser().parse_args()
    init_logger(args)
    if os.name == "nt":
        loop = asyncio.ProactorEventLoop()
        asyncio.set_event_loop(loop)
    else:
        loop = asyncio.get_event_loop()
    atexit.register(lambda: loop.close())

    ddb = FlatFileDB(args.ddb)
    pdb = FlatFileDB(args.pdb)
    rtr = Notifier(dict())
    log = Log(1000)

    if args.git:
        repo_backend = GitBackend(args.repository)
    else:
        repo_backend = FilesystemBackend(args.repository)
    repository = Repository(repo_backend, log.log)
    atexit.register(repository.close)
    repository.scan_async()

    worker_handlers = {
        "get_device": ddb.get,
        "get_parameter": pdb.get,
        "set_parameter": pdb.set,
        "update_rt_results": lambda mod: process_mod(rtr, mod),
        "log": log.log
    }
    scheduler = Scheduler(get_last_rid() + 1, worker_handlers, repo_backend)
    worker_handlers["scheduler_submit"] = scheduler.submit
    scheduler.start()
    atexit.register(lambda: loop.run_until_complete(scheduler.stop()))

    server_control = Server({
        "master_ddb": ddb,
        "master_pdb": pdb,
        "master_schedule": scheduler,
        "master_repository": repository
    })
    loop.run_until_complete(server_control.start(
        args.bind, args.port_control))
    atexit.register(lambda: loop.run_until_complete(server_control.stop()))

    server_notify = Publisher({
        "schedule": scheduler.notifier,
        "devices": ddb.data,
        "parameters": pdb.data,
        "rt_results": rtr,
        "explist": repository.explist,
        "log": log.data
    })
    loop.run_until_complete(server_notify.start(
        args.bind, args.port_notify))
    atexit.register(lambda: loop.run_until_complete(server_notify.stop()))

    loop.run_forever()
예제 #5
0
    def __init__(self, backend, log_fn):
        self.backend = backend
        self.log_fn = log_fn

        self.cur_rev = self.backend.get_head_rev()
        self.backend.request_rev(self.cur_rev)
        self.explist = Notifier(dict())

        self._scanning = False
예제 #6
0
    def __init__(self, persist_file, autosave_period=30):
        self.persist_file = persist_file
        self.autosave_period = autosave_period

        try:
            file_data = pyon.load_file(self.persist_file)
        except FileNotFoundError:
            file_data = dict()
        self.data = Notifier({k: (True, v) for k, v in file_data.items()})
예제 #7
0
    def __init__(self, ridc, worker_handlers, experiment_db):
        self.notifier = Notifier(dict())

        self._pipelines = dict()
        self._worker_handlers = worker_handlers
        self._experiment_db = experiment_db
        self._terminated = False

        self._ridc = ridc
        self._deleter = Deleter(self._pipelines)
예제 #8
0
    def __init__(self, next_rid, worker_handlers, repo_backend):
        self.notifier = Notifier(dict())

        self._pipelines = dict()
        self._worker_handlers = worker_handlers
        self._repo_backend = repo_backend
        self._terminated = False

        self._ridc = RIDCounter(next_rid)
        self._deleter = Deleter(self._pipelines)
예제 #9
0
파일: file_db.py 프로젝트: neuroidss/artiq
 def __init__(self, filename, default_data=None):
     self.filename = filename
     try:
         data = pyon.load_file(self.filename)
     except FileNotFoundError:
         if default_data is None:
             raise
         else:
             data = default_data
     self.data = Notifier(data)
     self.hooks = []
예제 #10
0
 def __init__(self, filename):
     self.filename = filename
     self.data = Notifier(pyon.load_file(self.filename))
     self.hooks = []
예제 #11
0
파일: databases.py 프로젝트: pzhou137/artiq
 def __init__(self, backing_file):
     self.backing_file = backing_file
     self.data = Notifier(pyon.load_file(self.backing_file))
예제 #12
0
    def __init__(self, ddb):
        self.broadcast = Notifier(dict())
        self.local = dict()

        self.ddb = ddb
        self.broadcast.publish = ddb.update
예제 #13
0
 def __init__(self, realtime_results):
     self.realtime_data = Notifier({x: [] for x in realtime_results})
     self.data = Notifier(dict())
예제 #14
0
파일: log.py 프로젝트: MikeTam1021/artiq
 def __init__(self, depth):
     self.depth = depth
     self.data = Notifier([])
예제 #15
0
 def __init__(self, backing_file):
     self.backing_file = backing_file
     self.data = Notifier(device_db_from_file(self.backing_file))
예제 #16
0
    def __init__(self):

        self.args = args = get_argparser().parse_args()
        init_logger(args)

        self.config = load_config(args, "_server")
        self.lasers = self.config["lasers"].keys()

        for laser in self.lasers:
            self.config["lasers"][laser]["lock_ready"] = False

        # connect to hardware
        self.wlm = WLM(args.simulation)
        self.osas = OSAs(self.config["osas"], args.simulation)

        self.exp_min = self.wlm.get_exposure_min()
        self.exp_max = self.wlm.get_exposure_max()
        self.num_ccds = self.wlm.get_num_ccds()

        if self.config["switch"]["type"] == "internal":
            self.switch = self.wlm.get_switch()
        elif self.config["switch"]["type"] == "leoni":
            self.switch = LeoniSwitch(
                self.config["switch"]["ip"], args.simulation)
        else:
            raise ValueError("Unrecognised switch type: {}".format(
                self.config["switch"]["type"]))

        # measurement queue, processed by self.measurement_task
        self.measurement_ids = task_id_generator()
        self.measurements_queued = asyncio.Event()
        self.queue = []

        self.wake_locks = {laser: asyncio.Event() for laser in self.lasers}

        # schedule initial frequency/osa readings all lasers
        self.measurements_queued.set()
        for laser in self.lasers:
            self.queue.append({
                "laser": laser,
                "priority": 0,
                "expiry": time.time(),
                "id": next(self.measurement_ids),
                "get_osa_trace": True,
                "done": asyncio.Event()
            })

        # "notify" interface
        self.laser_db = Notifier(self.config["lasers"])
        self.freq_db = Notifier({laser: {
            "freq": None,
            "status": WLMMeasurementStatus.ERROR,
            "timestamp": 0
        } for laser in self.lasers})
        self.osa_db = Notifier({laser: {
            "trace": None,
            "timestamp": 0
        } for laser in self.lasers})

        self.server_notify = Publisher({
            "laser_db": self.laser_db,  # laser settings
            "freq_db": self.freq_db,  # most recent frequency measurements
            "osa_db": self.osa_db  # most recent osa traces
        })

        # "control" interface
        self.control_interface = ControlInterface(self)
        self.server_control = RPCServer({"control": self.control_interface},
                                        allow_parallel=True)

        self.running = False
예제 #17
0
 def __init__(self):
     self.rt = Notifier(dict())
     self.nrt = dict()
     self.store = set()
예제 #18
0
 def __init__(self):
     self.groups = Notifier(dict())
     self.current_group = "default"
예제 #19
0
파일: file_db.py 프로젝트: neuroidss/artiq
 def __init__(self, depth):
     self.depth = depth
     self.history = Notifier([])