Beispiel #1
0
void worker_thread(const int job_id) {
	
	// init database connection
	DBManager dbm = DBManager("localhost", "user_name", "password", "db_name", 0);
	
	DBJob job = dbm.get_job(job_id);
	
	cout << "job terms: " << job.getTerms() << ", job type: " << job.getType() << endl;
	
	vector<string> queries = split(job.getTerms(), '$');
	vector<job_data> matches = ldp.get_matches(queries, job.getType());
	
	if (job.getType() == 1) {
		// build results as $-separated string
		string results_str = build_result_str(matches);
		cout << "result string: " << results_str << endl;
		dbm.update_completed_type134(job_id, results_str, job.getType());
	}
	else if (job.getType() == 2) {  // return 10 options for start and end terms
		dbm.update_completed_type2(job_id, matches[0].result, matches[1].result);
	}
	else if (job.getType() == 3 || job.getType() == 4) {
		dbm.update_completed_type134(job_id, matches[0].result, job.getType());
	}
	
	// clean up and close
	dbm.close();
}
Beispiel #2
0
int main(int argc, char* argv[]) {
	logger.init("log.out");

	// arguments are threshold1, threshold2, case_sensitive, filename
	if (!ldp.init(0.85f, 0.35f, false, "MRCONSO.RRF")) {
		logger.write("Error loading dictionary.");
		exit(1);
	}
	
	//****************....finished preloading....**************************
	logger.write("Preloading finished, waiting for new jobs.");
	
	// init database connection
	DBManager dbm = DBManager("localhost", "user_name", "password", "db_name", 1);
	while (true) {
		vector<int> job_ids = dbm.check_jobs();
		
		// if new jobs exists
		if (job_ids.size() > 0) {
			
			// update jobs as processing
			for (vector<int>::size_type i = 0; i != job_ids.size(); i++) {
				dbm.update_processing(job_ids[i]);
			}
			
			// spawn enough threads to handle jobs
			for (vector<int>::size_type i = 0; i != job_ids.size(); i++) {
				boost::thread t(&worker_thread, job_ids[i]);
			}
		}
		
		sleep(2);
		job_ids.clear();
	}
	
	// clean up and exit
	dbm.close();
	
	return 0;
}