Beispiel #1
0
    def test_lifecycle(self, run_job, jobs):
        def myfunc(tts):
            sleep(tts)

        num_threads_before = len(threading.enumerate())
        for i in range(3):
            run_job(myfunc, tts=5 * i / 100)

        job1, job2, job3 = sorted(jobs.values(), key=lambda x: x['started'])

        samples = []
        for i in range(50):
            samples.append((
                job1['status'],
                job2['status'],
                job3['status'],
                len(threading.enumerate()),
            ))
            sleep(1 / 100)

        got = list(OrderedDict.fromkeys(samples))
        expected = [
            ('finished', 'running', 'running', num_threads_before + 2),
            ('finished', 'finished', 'running', num_threads_before + 1),
            ('finished', 'finished', 'finished', num_threads_before + 0),
        ]
        assert got == expected
Beispiel #2
0
    def test_exception(self, run_job, jobs):
        def myfunc(divisor):
            nonlocal result
            result /= divisor

        result = 1
        num_threads_before = len(threading.enumerate())
        for i in range(3):
            run_job(myfunc, divisor=i)
        sleep(0.005)
        num_threads_after = len(threading.enumerate())

        assert num_threads_before == num_threads_after
        assert result == 0.5
        job1, job2, job3 = sorted(jobs.values(), key=lambda x: x['started'])
        assert job1['status'] == 'error'
        assert 'division by zero' in job1['info']
        assert job2['status'] == 'finished'
        assert job3['status'] == 'finished'
Beispiel #3
0
    def test_lifecycle(self, run_job, jobs):
        def myfunc(tts):
            sleep(tts)

        num_threads_before = len(threading.enumerate())
        for i in range(3):
            run_job(myfunc, tts=i/100)

        job1, job2, job3 = sorted(jobs.values(), key=lambda x: x['started'])
        assert job1['status'] == 'finished'
        assert job2['status'] == job3['status'] == 'running'
        assert len(threading.enumerate()) - num_threads_before == 2

        sleep(0.015)
        assert job2['status'] == 'finished'
        assert job3['status'] == 'running'
        assert len(threading.enumerate()) - num_threads_before == 1

        sleep(0.015)
        assert job3['status'] == 'finished'
        assert len(threading.enumerate()) - num_threads_before == 0
Beispiel #4
0
    def test_simple(self, run_job, jobs):
        def myfunc(add):
            nonlocal result
            result += add
            return add

        result = 0
        results = []
        for i in range(3):
            results.append(run_job(myfunc, add=i))
        sleep(0.005)
        assert result == 3
        assert len(jobs) == len(results) == 3
        assert set(jobs.keys()) == set(r[1] for r in results)
        assert all(j['status'] == 'finished' for j in jobs.values())
        assert set(j['info'] for j in jobs.values()) == set(['0', '1', '2'])