def test_WorkerPool_heartrate(url): broker = get_broker(url) pool = WorkerPool(broker, WorkerPool_heartrate_init, workers=1) with start_pool(pool): q = get_queue(url) res = Task(q.suicide_worker, heartrate=0.1, result_timeout=5)() assert res.wait(WAIT), repr(res) print(repr(res)) with assert_raises(TaskExpired): res.value
def Broker_duplicate_task_id(url, identifier): lock = TimeoutLock(locked=True) state = [] def func(arg): lock.acquire() return arg broker = get_broker(url) broker.expose(func) with thread_worker(broker, lock): q = get_queue(url) task = Task(q.func, id=identifier) res = task(1) eventually((lambda:res.status), const.ENQUEUED) msg = 'func [default:int] cannot enqueue task with duplicate id' with assert_raises(DuplicateTask, msg): task(2) lock.release() eventually((lambda:res.status), const.PROCESSING) msg = 'func [default:int] cannot enqueue task with duplicate id' with assert_raises(DuplicateTask, msg): task(3) lock.release() assert res.wait(timeout=WAIT), repr(res) eq_(res.value, 1) res = task(4) eventually((lambda:res.status), const.ENQUEUED) lock.release() eventually((lambda:res.status), const.PROCESSING) lock.release() assert res.wait(timeout=WAIT), repr(res) eq_(res.value, 4)
def Broker_duplicate_task_id(url, identifier): lock = TimeoutLock(locked=True) state = [] def func(arg): lock.acquire() return arg broker = get_broker(url) broker.expose(func) with thread_worker(broker, lock): q = get_queue(url) task = Task(q.func, id=identifier) res = task(1) eventually((lambda: res.status), const.ENQUEUED) msg = 'func [default:int] cannot enqueue task with duplicate id' with assert_raises(DuplicateTask, msg): task(2) lock.release() eventually((lambda: res.status), const.PROCESSING) msg = 'func [default:int] cannot enqueue task with duplicate id' with assert_raises(DuplicateTask, msg): task(3) lock.release() assert res.wait(timeout=WAIT), repr(res) eq_(res.value, 1) res = task(4) eventually((lambda: res.status), const.ENQUEUED) lock.release() eventually((lambda: res.status), const.PROCESSING) lock.release() assert res.wait(timeout=WAIT), repr(res) eq_(res.value, 4)
def test_clear_Queue(url): q = get_queue(url) eq_(len(q), 0) q.func() q.func() eq_(len(q), 2) del q[:] eq_(len(q), 0) msg = 'delitem is only valid with a full slice ([:])' with assert_raises(ValueError, msg=msg): del q[:2]
def no_such_task(url): broker = get_broker(url) with thread_worker(broker): # -- task-invoking code, usually another process -- q = get_queue(url) res = q.func('arg') assert res.wait(WAIT), repr(res) eq_(repr(res), '<Deferred func [default:%s] failed>' % res.id) with assert_raises(TaskFailure, 'func [default:%s] no such task' % res.id): res.value
def test_Broker_task_failed(url): lock = TimeoutLock(locked=True) def func(): lock.acquire() broker = get_broker(url) broker.expose(func) with thread_worker(broker): q = get_queue(url) res = q.func() broker.task_failed(res) assert res.wait(timeout=WAIT), repr(res) lock.release() with assert_raises(TaskExpired): res.value
def task_error(url): def func(arg): raise Exception('fail!') broker = get_broker(url) broker.expose(func) with thread_worker(broker): # -- task-invoking code, usually another process -- q = get_queue(url) res = q.func('arg') assert res.wait(WAIT), repr(res) eq_(repr(res), '<Deferred func [default:%s] failed>' % res.id) with assert_raises(TaskFailure, 'func [default:%s] Exception: fail!' % res.id): res.value
def test_deferred_task_fail_on_error(url): def func(arg): if arg == 0: raise Exception('zero fail!') return arg broker = get_broker(url) broker.expose(func) with thread_worker(broker): # -- task-invoking code, usually another process -- q = get_queue(url) res = q.func([q.func(1), q.func(0), q.func(2)]) res.wait(timeout=WAIT) msg = 'func [default:%s] Exception: zero fail!' % res.task.args[0][1].id with assert_raises(TaskFailure, msg): res.value
def test_worker_interrupted(url): def func(arg): raise KeyboardInterrupt() broker = get_broker(url) broker.expose(func) with thread_worker(broker): # -- task-invoking code, usually another process -- q = get_queue(url) res = q.func('arg') completed = res.wait(WAIT) assert completed, repr(res) eq_(repr(res), '<Deferred func [default:%s] failed>' % res.id) with assert_raises(TaskFailure, 'func [default:%s] KeyboardInterrupt: ' % res.id): res.value
def test_WorkerPool_start_twice(url): broker = get_broker(url) pool = WorkerPool(broker, get_broker, workers=1) with start_pool(pool): with assert_raises(Error): pool.start(handle_sigterm=False)