def setUp(self): self.ctxt = TempMongo().__enter__() try: self.a = MongoExperiment( bandit_algo=bandit_algos.Random(TwoArms()), mongo_handle=self.ctxt.mongo_jobs('foodb'), workdir=self.ctxt.workdir, exp_key='exp_key', poll_interval_secs=1.0, cmd=()) # create a second experiment with same key self.b = MongoExperiment( bandit_algo=bandit_algos.Random(GaussWave2()), mongo_handle=self.ctxt.mongo_jobs('foodb'), workdir=self.ctxt.workdir, exp_key='exp_key', poll_interval_secs=1.0, cmd=()) self.c = MongoExperiment( bandit_algo=bandit_algos.Random(GaussWave2()), mongo_handle=self.ctxt.mongo_jobs('foodb'), workdir=self.ctxt.workdir, exp_key='exp_key_different', poll_interval_secs=1.0, cmd=()) self.a.ddoc_init() self.c.ddoc_init() except: self.ctxt.__exit__(None) raise
def test_mongo_exp_with_threads(): def worker(host_id, n_jobs, timeout): mw = MongoWorker( mj=TempMongo.mongo_jobs('foodb'), ) t0 = time.time() while n_jobs: mw.run_one(host_id, timeout) print 'worker: ran job' n_jobs -= 1 for bandit_json in ('hyperopt.bandits.GaussWave2', 'hyperopt.dbn.Dummy_DBN_Base',): with TempMongo() as tm: assert len(TempMongo.mongo_jobs('foodb')) == 0 bandit = json_call(bandit_json) exp = MongoExperiment( bandit_algo=HGP(bandit), mongo_handle=tm.mongo_jobs('foodb'), workdir=tm.workdir, exp_key='exp_key', poll_interval_secs=1.0, cmd=('bandit_json evaluate', bandit_json)) exp.ddoc_init() assert len(TempMongo.mongo_jobs('foodb')) == 0 for asdf in exp.mongo_handle: print asdf assert len(exp.mongo_handle) == 0 n_trials = 5 exp.bandit_algo.n_startup_jobs = 3 wthread = threading.Thread(target=worker, args=(('hostname', 0), n_trials, 660.0)) wthread.start() try: print 'running experiment' exp.run(n_trials, block_until_done=True) finally: print 'joining worker thread...' wthread.join() print exp.trials print exp.results assert len(exp.trials) == n_trials assert len(exp.results) == n_trials exp_str = cPickle.dumps(exp)
class TestLock(unittest.TestCase): def setUp(self): self.ctxt = TempMongo().__enter__() try: self.a = MongoExperiment( bandit_algo=bandit_algos.Random(TwoArms()), mongo_handle=self.ctxt.mongo_jobs('foodb'), workdir=self.ctxt.workdir, exp_key='exp_key', poll_interval_secs=1.0, cmd=()) # create a second experiment with same key self.b = MongoExperiment( bandit_algo=bandit_algos.Random(GaussWave2()), mongo_handle=self.ctxt.mongo_jobs('foodb'), workdir=self.ctxt.workdir, exp_key='exp_key', poll_interval_secs=1.0, cmd=()) self.c = MongoExperiment( bandit_algo=bandit_algos.Random(GaussWave2()), mongo_handle=self.ctxt.mongo_jobs('foodb'), workdir=self.ctxt.workdir, exp_key='exp_key_different', poll_interval_secs=1.0, cmd=()) self.a.ddoc_init() self.c.ddoc_init() except: self.ctxt.__exit__(None) raise def tearDown(self): self.ctxt.__exit__(None) def test_lock_relock(self): with self.a.exclusive_access() as foo: self.assertRaises(OperationFailure, self.b.ddoc_lock) with self.b.exclusive_access() as foo: # test that c can still be acquired with b locked self.assertRaises(OperationFailure, self.a.ddoc_lock) with self.c.exclusive_access() as bar: self.assertRaises(OperationFailure, self.a.ddoc_lock) with self.a.exclusive_access() as foo: with self.a.exclusive_access() as foo2: with self.a.exclusive_access() as foo3: self.assertRaises(OperationFailure, self.b.ddoc_lock) assert self.a._locks == 3 assert self.a._locks == 2 self.assertRaises(OperationFailure, self.b.ddoc_lock) assert self.a._locks == 1 assert self.a._locks == 0 def test_clear_requires_lock(self): with self.a.exclusive_access() as foo: self.assertRaises(OperationFailure, self.b.clear_from_db)