def test_max_assoc_good(self): """ Check AE maximum association change produces good value """ ae = AE(scu_sop_class=['1.2.840.10008.1.1']) ae.maximum_associations = -10 self.assertTrue(ae.maximum_associations == 1) ae.maximum_associations = ['a'] self.assertTrue(ae.maximum_associations == 1) ae.maximum_associations = '10' self.assertTrue(ae.maximum_associations == 1) ae.maximum_associations = 0 self.assertTrue(ae.maximum_associations == 1) ae.maximum_associations = 5 self.assertTrue(ae.maximum_associations == 5)
def receive_store_simultaneous(nr_assoc, ds_per_assoc, use_yappi=False): """Run a Storage SCP and transfer datasets with simultaneous storescu's. Parameters ---------- nr_assoc : int The number of simultaneous associations that will be made. ds_per_assoc : int The number of C-STORE requests sent per successful association. use_yappi : bool, optional True to use the yappi profiler, False otherwise (default). """ if use_yappi: init_yappi() def handle(event): return 0x0000 ae = AE() ae.acse_timeout = 5 ae.dimse_timeout = 5 ae.network_timeout = 5 ae.maximum_associations = 15 ae.add_supported_context(DATASET.SOPClassUID, ImplicitVRLittleEndian) server = ae.start_server( ('', 11112), block=False, evt_handlers=[(evt.EVT_C_STORE, handle)] ) time.sleep(0.5) start_time = time.time() run_times = [] is_successful = True processes = [] for ii in range(nr_assoc): processes.append(start_storescu(ds_per_assoc)) while None in [pp.poll() for pp in processes]: pass returncodes = list(set([pp.returncode for pp in processes])) if len(returncodes) != 1 or returncodes[0] != 0: is_successful = False if is_successful: print( "C-STORE SCP transferred {} total datasets over {} " "association(s) in {:.2f} s" .format(nr_assoc * ds_per_assoc, nr_assoc, time.time() - start_time) ) else: print("C-STORE SCP benchmark failed") server.shutdown()
def receive_store_simultaneous(test_ds, nr_assoc, ds_per_assoc, use_yappi=False): """Run a Storage SCP and transfer datasets with simultaneous storescu's. Parameters ---------- test_ds : pydicom.dataset.Dataset The test dataset to use nr_assoc : int The number of simultaneous associations that will be made. ds_per_assoc : int The number of C-STORE requests sent per successful association. use_yappi : bool, optional True to use the yappi profiler, False otherwise (default). """ if use_yappi: init_yappi() def handle(event): return 0x0000 ae = AE() ae.acse_timeout = 5 ae.dimse_timeout = 5 ae.network_timeout = 5 ae.maximum_associations = 15 ae.add_supported_context(test_ds.SOPClassUID, ImplicitVRLittleEndian) server = ae.start_server( ("localhost", 11112), block=False, evt_handlers=[(evt.EVT_C_STORE, handle)] ) time.sleep(0.5) start_time = time.time() is_successful = True processes = [] for ii in range(nr_assoc): processes.append(start_storescu(test_ds, ds_per_assoc)) while None in [pp.poll() for pp in processes]: pass returncodes = list(set([pp.returncode for pp in processes])) if len(returncodes) != 1 or returncodes[0] != 0: is_successful = False if is_successful: print( f"C-STORE SCP transferred {nr_assoc * ds_per_assoc} total " f"{os.path.basename(test_ds.filename)} datasets over " f"{nr_assoc} association{'' if nr_assoc == 1 else 's'} " f"in {time.time() - start_time:.2f} s" ) else: print("C-STORE SCP benchmark failed") server.shutdown()
def main(): global inference_queue inference_queue = deque() global dicom_store dicom_store = {} # Parent folder to all storage requests os_helpers.make_directory(config.SCP_STORAGE_PATH) ae = AE() ae.network_timeout = None ae.acse_timeout = None ae.dimse_timeout = None ae.maximum_pdu_size = 0 ae.maximum_associations = 14 # Tested with 14 threads handlers = [ (evt.EVT_ACCEPTED, handle_accepted), (evt.EVT_C_STORE, handle_store), (evt.EVT_RELEASED, handle_release), ] storage_sop_classes = [ cx.abstract_syntax for cx in AllStoragePresentationContexts ] for uid in storage_sop_classes: ae.add_supported_context(uid, ALL_TRANSFER_SYNTAXES) ae.start_server((config.SCP_IP, config.SCP_PORT), block=False, evt_handlers=handlers) print_listening() inference_loop()
def main(): handlers = [(evt.EVT_C_STORE, handle_store), (evt.EVT_RELEASED, handle_release)] ae = AE() ae.network_timeout = None ae.acse_timeout = None ae.dimse_timeout = None ae.maximum_pdu_size = 0 ae.maximum_associations = 1 # TODO Handle more than one storage_sop_classes = [ cx.abstract_syntax for cx in AllStoragePresentationContexts ] for uid in storage_sop_classes: ae.add_supported_context(uid, ALL_TRANSFER_SYNTAXES) print("\nListening for association request on port:", config.SCP_PORT) ae.start_server((config.SCP_IP, config.SCP_PORT), block=True, evt_handlers=handlers)