def GiveDicoJonesMatrices(self): print >> log, " Getting Jones matrices from Shared Memory" DicoJonesMatrices = {} GD = self.GD SolsFile = GD["DDESolutions"]["DDSols"] if SolsFile != "": DicoJones_killMS = NpShared.SharedToDico("%sJonesFile_killMS" % self.IdSharedMem) DicoJonesMatrices["DicoJones_killMS"] = DicoJones_killMS DicoJonesMatrices["DicoJones_killMS"][ "MapJones"] = NpShared.GiveArray("%sMapJones_killMS" % self.IdSharedMem) DicoClusterDirs_killMS = NpShared.SharedToDico( "%sDicoClusterDirs_killMS" % self.IdSharedMem) DicoJonesMatrices["DicoJones_killMS"][ "DicoClusterDirs"] = DicoClusterDirs_killMS ApplyBeam = (GD["Beam"]["Model"] is not None) if ApplyBeam: DicoJones_Beam = NpShared.SharedToDico("%sJonesFile_Beam" % self.IdSharedMem) DicoJonesMatrices["DicoJones_Beam"] = DicoJones_Beam DicoJonesMatrices["DicoJones_Beam"][ "MapJones"] = NpShared.GiveArray("%sMapJones_Beam" % self.IdSharedMem) DicoClusterDirs_Beam = NpShared.SharedToDico( "%sDicoClusterDirs_Beam" % self.IdSharedMem) DicoJonesMatrices["DicoJones_Beam"][ "DicoClusterDirs"] = DicoClusterDirs_Beam return DicoJonesMatrices
def giveDicoInitIndiv(self, ListIslands, ModelImage, DicoDirty, ListDoIsland=None, Parallel=True): NCPU = self.NCPU work_queue = multiprocessing.JoinableQueue() ListIslands = ListIslands #[300:308] DoIsland = True for iIsland in range(len(ListIslands)): if ListDoIsland is not None: DoIsland = ListDoIsland[iIsland] if DoIsland: work_queue.put({"iIsland": iIsland}) result_queue = multiprocessing.JoinableQueue() NJobs = work_queue.qsize() workerlist = [] logger.setSilent(SilentModules) #MyLogger.setLoud(SilentModules) #MyLogger.setLoud("ClassImageDeconvMachineMSMF") print >> log, "Launch MORESANE workers" for ii in range(NCPU): W = WorkerInitMSMF(work_queue, result_queue, self.GD, self.DicoVariablePSF, DicoDirty, self.RefFreq, self.GridFreqs, self.DegridFreqs, self.MainCache, ModelImage, ListIslands, self.IdSharedMem) workerlist.append(W) if Parallel: workerlist[ii].start() timer = ClassTimeIt.ClassTimeIt() pBAR = ProgressBar(Title=" MORESANing islands ") #pBAR.disable() pBAR.render(0, NJobs) iResult = 0 if not Parallel: for ii in range(NCPU): workerlist[ii].run() # just run until all work is completed self.DicoInitIndiv = {} while iResult < NJobs: DicoResult = None if result_queue.qsize() != 0: try: DicoResult = result_queue.get() except: pass if DicoResult == None: time.sleep(0.5) continue if DicoResult["Success"]: iResult += 1 NDone = iResult pBAR.render(NDone, NJobs) iIsland = DicoResult["iIsland"] NameDico = "%sDicoInitIsland_%5.5i" % (self.IdSharedMem, iIsland) Dico = NpShared.SharedToDico(NameDico) self.DicoInitIndiv[iIsland] = copy.deepcopy(Dico) NpShared.DelAll(NameDico) if Parallel: for ii in range(NCPU): workerlist[ii].shutdown() workerlist[ii].terminate() workerlist[ii].join() #MyLogger.setLoud(["pymoresane.main"]) #MyLogger.setLoud(["ClassImageDeconvMachineMSMF","ClassPSFServer","ClassMultiScaleMachine","GiveModelMachine","ClassModelMachineMSMF"]) return self.DicoInitIndiv