

def pre_allocate_expr(self, context):
    hackathon_id = context.hackathon_id
    self.log.debug(('executing pre_allocate_expr for hackathon %s ' % hackathon_id))
    hackathon = Hackathon.objects(id=hackathon_id).first()
    hackathon_templates = hackathon.templates
    for template in hackathon_templates:
        try:
            template = template
            pre_num = int(hackathon.config.get('pre_allocate_number', 1))
            query = (Q(status=EStatus.STARTING) | Q(status=EStatus.RUNNING))
            curr_num = Experiment.objects(user=None, hackathon=hackathon, template=template).filter(query).count()
            if (template.provider == VE_PROVIDER.AZURE):
                if (curr_num < pre_num):
                    remain_num = (pre_num - curr_num)
                    start_num = Experiment.objects(user=None, template=template, status=EStatus.STARTING).count()
                    if (start_num > 0):
                        template.log.debug('there is an azure env starting, will check later ... ')
                        return
                    else:
                        self.log.debug(('no starting template: %s , remain num is %d ... ' % (template.name, remain_num)))
                        self.start_expr(None, template.name, hackathon.name)
                        break
            elif (template.provider == VE_PROVIDER.DOCKER):
                if (hackathon.config.get('cloud_provider') == CLOUD_PROVIDER.ALAUDA):
                    continue
                self.log.debug(('template name is %s, hackathon name is %s' % (template.name, hackathon.name)))
                if (curr_num < pre_num):
                    remain_num = (pre_num - curr_num)
                    start_num = Experiment.objects(user=None, template=template, status=EStatus.STARTING).count()
                    if (start_num > 0):
                        self.log.debug('there is an docker container starting, will check later ... ')
                        return
                    self.log.debug(('no idle template: %s, remain num is %d ... ' % (template.name, remain_num)))
                    self.start_expr(None, template.name, hackathon.name)
                    break
        except Exception as e:
            self.log.error(e)
            self.log.error('check default experiment failed')

dataset/ETHPy150Open msopentechcn/open-hackathon/open-hackathon-server/src/hackathon/expr/expr_mgr.py ExprManager.pre_allocate_expr/VarMisuse@197/287 `self`->`template`