示例#1
0
class BigDataNode(object):
    def __init__(self, run):
        self.evt_man = EventManager(run.configs, run.dm, \
                filter_fn=run.filter_callback)
        self.run = run

    def run_mpi(self):
        while True:
            bd_comm.Send(np.array([bd_rank], dtype='i'), dest=0)
            info = MPI.Status()
            bd_comm.Probe(source=0, tag=MPI.ANY_TAG, status=info)
            count = info.Get_elements(MPI.BYTE)
            chunk = bytearray(count)
            bd_comm.Recv(chunk, source=0)
            if count == 0:
                break

            if chunk == bytearray(b'wait'):
                continue

            pf = PacketFooter(view=chunk)
            smd_chunk, epics_chunk = pf.split_packets()

            pfe = PacketFooter(view=epics_chunk)
            epics_views = pfe.split_packets()
            self.run.epics_store.update(epics_views)

            if self.run.scan:
                yield Step(self.run, smd_batch=smd_chunk)
            else:
                for event in self.evt_man.events(smd_chunk):
                    yield event
示例#2
0
    def events(self):
        # Event generator that yields list of events from
        # an smd_chunk: data from smd0 that needs to be event built (serial mode) or
        # an smd_batch: prebuilt smd data (parallel mode)
        ev_man = EventManager(self.run.configs, self.run.dm, \
                filter_fn=self.run.filter_callback)

        if self.eb_man:

            for batch_dict in self.eb_man.batches(limit_ts=self.limit_ts):
                batch, _ = batch_dict[0]
                for evt in ev_man.events(batch):
                    if evt._dgrams[0].seq.service() != 12: continue
                    yield evt

        else:
            for evt in ev_man.events(self.smd_batch):
                if evt._dgrams[0].seq.service() != 12: continue
                yield evt
示例#3
0
    def events(self):
        ev_man = EventManager(self.configs, self.dm, \
                filter_fn=self.filter_callback)

        #get smd chunks
        smdr_man = SmdReaderManager(self.smd_dm.fds, self.max_events)
        for (smd_chunk, step_chunk) in smdr_man.chunks():
            # Update epics_store for each chunk
            step_pf = PacketFooter(view=step_chunk)
            step_views = step_pf.split_packets()
            self.epics_store.update(step_views)

            eb_man = EventBuilderManager(smd_chunk,
                                         self.configs,
                                         batch_size=self.batch_size,
                                         filter_fn=self.filter_callback)

            for batch_dict in eb_man.batches():
                batch, _ = batch_dict[
                    0]  # there's only 1 dest_rank for serial run
                for evt in ev_man.events(batch):
                    if evt._dgrams[0].seq.service() != 12: continue
                    yield evt
示例#4
0
def run_bigdata_task(batch, run):
    evt_man = EventManager(run.configs, run.dm, run.filter_callback)
    for evt in evt_man.events(batch):
        if evt._dgrams[0].seq.service() != 12: continue
        run.event_fn(evt, run.det)