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
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'
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
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'])