예제 #1
0
    def test_job_status(self):
        # Given/When
        j = jobs.Job([sys.executable, '-c', 'import time; time.sleep(0.25)'],
                     output_dir=self.root)

        # Then
        self.assertEqual(j.status(), 'not started')

        # When
        j.run()

        # Then
        self.assertEqual(j.status(), 'running')

        # When
        j.proc.wait()
        self.assertEqual(j.status(), 'done')

        # Given
        j = jobs.Job([sys.executable, '-c', 'asdf'], output_dir=self.root)
        # When
        j.run()
        j.proc.wait()

        # Then
        self.assertEqual(j.status(), 'error')
        self.assertTrue('NameError' in j.get_stderr())
예제 #2
0
    def test_simple_job(self):
        # Given
        command = [
            'python', '-c',
            'import sys;sys.stdout.write("1");sys.stderr.write("2")'
        ]
        j = jobs.Job(command=command, output_dir=self.root)

        # When
        j.run()
        j.proc.wait()

        # Then
        self.assertEqual(j.status(), 'done')
        self.assertEqual(j.output_dir, self.root)
        self.assertEqual(j.n_core, 1)
        self.assertEqual(j.n_thread, 1)
        self.assertEqual(j.get_stdout(), '1')
        self.assertEqual(j.get_stderr(), '2')
        state = j.to_dict()
        expect = dict(command=command,
                      output_dir=self.root,
                      n_core=1,
                      n_thread=1,
                      env=None)
        expect['command'][0] = sys.executable
        self.assertDictEqual(state, expect)
예제 #3
0
 def _make_dummy_job(self, n_core=1, sleep=0.05):
     output = os.path.join(self.root, 'job%d' % self.count)
     job = jobs.Job([
         sys.executable, '-c',
         'import time; time.sleep(%f); print(1)' % sleep
     ],
                    output_dir=output,
                    n_core=n_core)
     self.count += 1
     return job
예제 #4
0
    def test_that_job_sets_env_var(self):
        # Given/When
        j = jobs.Job(
            [sys.executable, '-c', 'import os;print(os.environ.get("FOO"))'],
            output_dir=self.root,
            env=dict(FOO='hello'))
        j.run()
        j.proc.wait()

        # Then
        self.assertEqual(j.status(), 'done')
        self.assertEqual(j.get_stdout().strip(), 'hello')
예제 #5
0
    def test_job_can_handle_string_command(self):
        # Given
        command = '''\
        python -c 'import sys;sys.stdout.write("1");sys.stderr.write("2")' '''
        j = jobs.Job(command=command, output_dir=self.root)

        # When
        j.run()
        j.proc.wait()

        # Then.
        self.assertTrue(isinstance(j.command, list))
        self.assertTrue(j.status(), 'done')
        self.assertEqual(j.get_stdout(), '1')
        self.assertEqual(j.get_stderr(), '2')
예제 #6
0
    def test_scheduler_starts_worker_on_submit(self, mock_lw):
        attrs = {'host': 'localhost', 'free_cores.return_value': 2}
        mock_lw.return_value = mock.MagicMock(**attrs)

        # Given
        config = [dict(host='localhost')]
        s = jobs.Scheduler(worker_config=config)
        j = jobs.Job([sys.executable, '-c', 'print(1)'], output_dir=self.root)

        # When
        s.submit(j)

        # Then
        self.assertEqual(mock_lw.call_count, 1)
        self.assertEqual(len(s.workers), 1)
예제 #7
0
    def test_scheduler_works_with_local_worker(self):
        # Given
        s = jobs.Scheduler(worker_config=[dict(host='localhost')])

        # When
        j = jobs.Job(
            [sys.executable, '-c', 'import time; time.sleep(0.05); print(1)'],
            output_dir=self.root)
        proxy = s.submit(j)

        # Then
        wait_until(lambda: proxy.status() != 'done', timeout=2)
        self.assertEqual(proxy.status(), 'done')
        self.assertEqual(proxy.get_stderr(), '')
        self.assertEqual(proxy.get_stdout().strip(), '1')
예제 #8
0
    def test_that_job_sets_omp_var(self):
        j = jobs.Job(
            [
                sys.executable, '-c',
                'import os;print(os.environ.get("OMP_NUM_THREADS"))'
            ],
            output_dir=self.root,
            n_thread=4,
        )
        j.run()
        j.proc.wait()

        # Then
        self.assertEqual(j.status(), 'done')
        self.assertEqual(j.get_stdout().strip(), '4')
예제 #9
0
    def test_simple(self):
        # Given
        r = jobs.RemoteWorker(host='localhost',
                              python=sys.executable,
                              testing=True)

        # When
        j = jobs.Job(
            [sys.executable, '-c', 'import time; time.sleep(0.05); print(1)'],
            output_dir=self.root)
        proxy = r.run(j)

        # Then
        wait_until(lambda: proxy.status() != 'done')
        self.assertEqual(proxy.status(), 'done')
        self.assertEqual(proxy.get_stderr(), '')
        self.assertEqual(proxy.get_stdout().strip(), '1')