Exemplo n.º 1
0
    def getJob(self):
        'Return the next job on the queue to execute, removing it from queue'

        if self.runningJob!=None:
            logging.warning("Call of getJob() while a job is running - returning None")
            return None

        # Remove any shake jobs that are unneeded
        for id,j in self.jobs.items():
            if j['type']=='shake' and len(j['prereqs'])==0 and j['sample'].isMixed() and not Experiment.shakerIsActive():
                #print "Removing unneeded shake job ",id
                self.removeJob(id)

        for id in self.jobs:
            j=self.jobs[id]
            if j['type']!='transfer' or len(j['prereqs'])>0 or  j['src'].plate.curloc!='Home' or  j['dest'].plate.curloc!='Home':
                #if j['type']=='transfer':
                #   print "Can't execute job ",id,": ",j,", curlocs=",j['src'].plate.curloc,", ",j['dest'].plate.curloc
                continue
            return id

        for id,j in self.jobs.iteritems():
            if j['type']!='multitransfer' or len(j['prereqs'])>0 or  j['src'].plate.curloc!='Home'  or  j['dest'].plate.curloc!='Home':
                continue
            # Combine with all other multitransfers from same src
            alldest=[]
            allvol=[]
            for id2,j2 in self.jobs.items():
                if j2['type']!='multitransfer' or len(j2['prereqs'])>0 or j['src']!=j2['src']:
                    continue
                alldest.append(j2['dest'])
                allvol.append(j2['volume'])
                self.removeJob(id2)
            combined=self.addMultiTransfer(volume=allvol,src=j['src'],dest=alldest,prereqs=[])
            return combined

        for id in self.jobs:
            j=self.jobs[id]
            if j['type']!='shake' or len(j['prereqs'])>0 or not j['sample'].plate.curloc=='Home' or Experiment.shakerIsActive():
                continue
            return id
        # Nothing to do
        return None