def test_timeout(self): # Make sure the executor has already started to avoid timeout happening # before future1 returns assert self.executor.submit(id_sleep, 42).result() == 42 future1 = self.executor.submit(mul, 6, 7) future2 = self.executor.submit(self.wait_and_return, 5) assert future1.result() == 42 finished, pending = futures.wait([ CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, SUCCESSFUL_FUTURE, future1, future2 ], timeout=.1, return_when=futures.ALL_COMPLETED) assert set([ CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, SUCCESSFUL_FUTURE, future1 ]) == finished assert set([future2]) == pending _executor_mixin._test_event.set() assert future2.result(timeout=10) _executor_mixin._test_event.clear()
def test_first_exception_one_already_failed(self): future1 = self.executor.submit(time.sleep, 2) finished, pending = futures.wait([EXCEPTION_FUTURE, future1], return_when=futures.FIRST_EXCEPTION) assert set([EXCEPTION_FUTURE]) == finished assert set([future1]) == pending
def test_first_completed(self): future1 = self.executor.submit(mul, 21, 2) future2 = self.executor.submit(time.sleep, 1.5) done, not_done = futures.wait([CANCELLED_FUTURE, future1, future2], return_when=futures.FIRST_COMPLETED) assert set([future1]) == done assert set([CANCELLED_FUTURE, future2]) == not_done
def test_first_completed_some_already_completed(self): future1 = self.executor.submit(time.sleep, 1.5) finished, pending = futures.wait( [CANCELLED_AND_NOTIFIED_FUTURE, SUCCESSFUL_FUTURE, future1], return_when=futures.FIRST_COMPLETED) assert (set([CANCELLED_AND_NOTIFIED_FUTURE, SUCCESSFUL_FUTURE]) == finished) assert set([future1]) == pending
def test_first_exception(self, exit_on_deadlock): future1 = self.executor.submit(mul, 2, 21) future2 = self.executor.submit(sleep_and_raise, 1.5) future3 = self.executor.submit(time.sleep, 3) finished, pending = futures.wait([future1, future2, future3], return_when=futures.FIRST_EXCEPTION) assert set([future1, future2]) == finished assert set([future3]) == pending
def test_all_completed(self): future1 = self.executor.submit(divmod, 2, 0) future2 = self.executor.submit(mul, 2, 21) finished, pending = futures.wait([SUCCESSFUL_FUTURE, EXCEPTION_FUTURE, CANCELLED_AND_NOTIFIED_FUTURE, future1, future2], return_when=futures.ALL_COMPLETED) assert set([SUCCESSFUL_FUTURE, CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, future1, future2]) == finished assert set() == pending
def test_first_exception_some_already_complete(self): future1 = self.executor.submit(divmod, 21, 0) future2 = self.executor.submit(time.sleep, 1.5) finished, pending = futures.wait([SUCCESSFUL_FUTURE, CANCELLED_FUTURE, CANCELLED_AND_NOTIFIED_FUTURE, future1, future2], return_when=futures.FIRST_EXCEPTION) assert set([SUCCESSFUL_FUTURE, CANCELLED_AND_NOTIFIED_FUTURE, future1]) == finished assert set([CANCELLED_FUTURE, future2]) == pending
def test_timeout(self, exit_on_deadlock): future1 = self.executor.submit(mul, 6, 7) future2 = self.executor.submit(time.sleep, 2) finished, pending = futures.wait([ CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, SUCCESSFUL_FUTURE, future1, future2 ], timeout=1, return_when=futures.ALL_COMPLETED) assert set([ CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, SUCCESSFUL_FUTURE, future1 ]) == finished assert set([future2]) == pending
def test_first_exception(self): future1 = self.executor.submit(mul, 2, 21) future2 = self.executor.submit(self.wait_and_raise, 1.5) future3 = self.executor.submit(time.sleep, 3) def cb_done(f): _executor_mixin._test_event.set() future1.add_done_callback(cb_done) finished, pending = futures.wait([future1, future2, future3], return_when=futures.FIRST_EXCEPTION) assert _executor_mixin._test_event.is_set() assert set([future1, future2]) == finished assert set([future3]) == pending _executor_mixin._test_event.clear()
def test_first_exception(self): manager = self.context.Manager() event = manager.Event() future1 = self.executor.submit(mul, 2, 21) future2 = self.executor.submit(self.wait_and_raise, event, 1.5) future3 = self.executor.submit(time.sleep, 3) def cb_done(f): event.set() future1.add_done_callback(cb_done) finished, pending = futures.wait([future1, future2, future3], return_when=futures.FIRST_EXCEPTION) assert event.is_set() assert set([future1, future2]) == finished assert set([future3]) == pending manager.shutdown()