def run_generation_techniques(self): tests_this_generation = 0 self.plugin_proxy.before_techniques() self.root_technique.start_batch() if self.batch_composer: batch = self.batch_composer.compose_batch() batch_size = len(batch) else: batch_size = self.args.parallelism for z in xrange(batch_size): if self.batch_composer: dr = batch.pop(0) elif self.seed_cfgs: config = self.get_configuration(self.seed_cfgs.pop()) dr = DesiredResult(configuration=config, requestor='seed', generation=self.generation, request_date=datetime.now(), tuning_run=self.tuning_run) else: dr = self.root_technique.desired_result() if dr is None or dr is False: log.debug("no desired result, skipping to testing phase") break self.session.flush() # populate configuration_id duplicates = (self.session.query(DesiredResult).filter_by( tuning_run=self.tuning_run, configuration_id=dr.configuration_id).filter( DesiredResult.id != dr.id).order_by( DesiredResult.request_date).limit(1).all()) self.session.add(dr) if len(duplicates): if not self.args.no_dups: log.warning("duplicate configuration request #%d %s/%s %s", self.test_count, dr.requestor, duplicates[0].requestor, 'OLD' if duplicates[0].result else 'PENDING') self.session.flush() desired_result_id = dr.id def callback(result): dr = self.session.query(DesiredResult).get( desired_result_id) dr.result = result dr.state = 'COMPLETE' dr.start_date = datetime.now() self.register_result_callback(duplicates[0], callback) else: log.debug("desired result id=%d, cfg=%d", dr.id, dr.configuration_id) dr.state = 'REQUESTED' self.test_count += 1 tests_this_generation += 1 self.plugin_proxy.after_techniques() return tests_this_generation
def run_generation_techniques(self): tests_this_generation = 0 self.plugin_proxy.before_techniques() for z in xrange(self.args.parallelism): if self.seed_cfgs: config = self.get_configuration(self.seed_cfgs.pop()) dr = DesiredResult(configuration=config, requestor='seed', generation=self.generation, request_date=datetime.now(), tuning_run=self.tuning_run) else: dr = self.root_technique.desired_result() if dr is None: log.debug("no desired result, skipping to testing phase") break self.session.flush() # populate configuration_id duplicates = (self.session.query(DesiredResult) .filter_by(tuning_run=self.tuning_run, configuration_id=dr.configuration_id) .filter(DesiredResult.id != dr.id) .order_by(DesiredResult.request_date) .limit(1).all()) self.session.add(dr) if len(duplicates): if not self.args.no_dups: log.warning("duplicate configuration request #%d %s/%s %s", self.test_count, dr.requestor, duplicates[0].requestor, 'OLD' if duplicates[0].result else 'PENDING') self.session.flush() desired_result_id = dr.id def callback(result): dr = self.session.query(DesiredResult).get(desired_result_id) dr.result = result dr.state = 'COMPLETE' dr.start_date = datetime.now() self.register_result_callback(duplicates[0], callback) else: log.debug("desired result id=%d, cfg=%d", dr.id, dr.configuration_id) dr.state = 'REQUESTED' self.test_count += 1 tests_this_generation += 1 self.plugin_proxy.after_techniques() return tests_this_generation