Beispiel #1
0
 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
Beispiel #2
0
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)
Beispiel #3
0
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)