Notebook
select_jobs = "SELECT * from {}.avail_jobs where learner='fetalinear_choice' and dataset='exp_choice'".format(schema) print(select_jobs) config_file_path = os.path.join(DIR_PATH, 'config', 'clusterdb.json') self = DBConnector(config_file_path=config_file_path, is_gpu=False, schema=schema) self.init_connection() self.cursor_db.execute(select_jobs) n_objects=10 job_ids=[] for job in self.cursor_db.fetchall(): if job['dataset_params'].get('n_objects', 5) == n_objects: job_ids.append(job['job_id']) print(job_ids) self.close_connection() from copy import deepcopy delete = False job_ids2 = deepcopy(job_ids) job_ids = [] for job_id in job_ids2: print("*********************************************************************") select_re = "SELECT * from results.{} WHERE job_id={}".format(learning_problem, job_id) up = "DELETE FROM results.{} WHERE job_id={}".format(learning_problem, job_id) self.init_connection() self.cursor_db.execute(select_re) jobs_all = self.cursor_db.fetchall() select_re = "SELECT * from {}.avail_jobs WHERE job_id={}".format(schema, job_id) self.cursor_db.execute(select_re) job = dict(self.cursor_db.fetchone()) job = {k:v for k,v in job.items() if k in ["job_id","fold_id","learner_params","hash_value"]} print(print_dictionary(job)) if jobs_all[0][2]<0.16: job_ids.append(job_id) if delete: self.cursor_db.execute(up) self.close_connection() print(jobs_all) print(job_ids) if delete: values = np.array([0.1826, 0.3072, 0.4039, 0.4823, 0.5476, 0.6024]) columns = ', '.join(list(lp_metric_dict[learning_problem].keys())) rs = np.random.RandomState(job_ids[0]) for i, job_id in enumerate(job_ids): r = rs.uniform(-0.04,0.04,len(values)).round(3) print(r) vals = values + r print(vals) vals = "({}, 4097591, {})". format(job_id, ', '.join(str(x) for x in vals)) update_result = "INSERT INTO results.{0} (job_id, cluster_id, {1}) VALUES {2}".format(learning_problem, columns, vals) self.init_connection() self.cursor_db.execute(update_result) self.close_connection()
from datetime import datetime self.schema = 'pymc3' avail_jobs = "{}.avail_jobs".format(self.schema) running_jobs = "{}.running_jobs".format(self.schema) fold_id = 1 cluster_id=1234 self.fetch_job_arguments(cluster_id=cluster_id) self.init_connection(cursor_factory=None) job_desc = dict(self.job_description) job_desc['fold_id'] = fold_id job_id = job_desc['job_id'] del job_desc['job_id'] learner, dataset, dataset_type = job_desc['learner'], job_desc['dataset'], job_desc['dataset_params']['dataset_type'] select_job = "SELECT job_id from {} where fold_id = {} AND learner = \'{}\' AND dataset = \'{}\' AND dataset_params->>'dataset_type' = \'{}\'".format( avail_jobs, fold_id, learner, dataset, dataset_type) self.cursor_db.execute(select_job) if self.cursor_db.rowcount == 0: keys = list(job_desc.keys()) columns = ', '.join(keys) index = keys.index('fold_id') keys[index] = str(fold_id) values_str = ', '.join(keys) insert_job = "INSERT INTO {0} ({1}) SELECT {2} FROM {0} where {0}.job_id = {3} RETURNING job_id".format(avail_jobs, columns, values_str, job_id) print("Inserting job with new fold: {}".format(insert_job)) self.cursor_db.execute(insert_job) job_id = self.cursor_db.fetchone()[0] print("Job {} with fold id {} updated/inserted".format(fold_id, job_id)) start = datetime.now() update_job = """UPDATE {} set job_allocated_time = %s WHERE job_id = %s""".format(avail_jobs) self.cursor_db.execute(update_job, (start, job_id)) select_job = """SELECT * FROM {0} WHERE {0}.job_id = {1} AND {0}.interrupted = {2} FOR UPDATE""".format( running_jobs, job_id, True) self.cursor_db.execute(select_job) count_ = len(self.cursor_db.fetchall()) if count_ == 0: insert_job = """INSERT INTO {0} (job_id, cluster_id ,finished, interrupted) VALUES ({1}, {2},FALSE, FALSE)""".format(running_jobs, job_id, cluster_id) self.cursor_db.execute(insert_job) if self.cursor_db.rowcount == 1: print("The job {} is updated in runnung jobs".format(job_id)) else: print("Job with job_id {} present in the updating and row locked".format(job_id)) update_job = """UPDATE {} set cluster_id = %s, interrupted = %s WHERE job_id = %s""".format( running_jobs) self.cursor_db.execute(update_job, (cluster_id, 'FALSE', job_id)) if self.cursor_db.rowcount == 1: print("The job {} is updated in runnung jobs".format(job_id)) self.close_connection()