def test_duplicate_futures(self): py_version = sys.version_info[:3] if py_version[0] == 3 and py_version < (3, 3, 5): return # Issue 20367. Duplicate futures should not raise exceptions or give # duplicate responses. future1 = self.executor.submit(time.sleep, 0.1) completed = [f for f in futures.as_completed([future1, future1])] self.assertEqual(len(completed), 1)
def test_no_timeout(self): future1 = self.executor.submit(mul, 2, 21) future2 = self.executor.submit(mul, 7, 6) completed = set(futures.as_completed( [CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, SUCCESSFUL_FUTURE, future1, future2])) self.assertEqual(set( [CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, SUCCESSFUL_FUTURE, future1, future2]), completed)
def test_zero_timeout(self): future1 = self.executor.submit(time.sleep, 0.2) completed_futures = set() try: for future in futures.as_completed( [CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, SUCCESSFUL_FUTURE, future1], timeout=0): completed_futures.add(future) except futures.TimeoutError: pass self.assertEqual(set([CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, SUCCESSFUL_FUTURE]), completed_futures)
def test_zero_timeout(self): future1 = self.executor.submit(time.sleep, 0.5) completed_futures = set() try: for future in futures.as_completed([ CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, SUCCESSFUL_FUTURE, future1 ], timeout=0): completed_futures.add(future) except futures.TimeoutError: pass self.assertEqual( set([ CANCELLED_AND_NOTIFIED_FUTURE, EXCEPTION_FUTURE, SUCCESSFUL_FUTURE ]), completed_futures)
def as_completed(futures): ptypes = [type(f.executor) for f in futures] assert len(set(ptypes)) == 1 ptype = ptypes[0] threads = [f for f in futures if f.kind == 'thread'] processes = [f for f in futures if f.kind == 'process'] if processes: proc_dct = {f.process: f for f in futures} if ptype == EnhancedMPIPoolExecutor: from mpi4py.futures import as_completed else: from concurrent.futures import as_completed for future in as_completed(proc_dct): yield proc_dct[future] if threads: for future in threads: yield future
def test_duplicate_futures(self): # Issue 20367. Duplicate futures should not raise exceptions or give # duplicate responses. future1 = self.executor.submit(time.sleep, 0.1) completed = [f for f in futures.as_completed([future1, future1])] self.assertEqual(len(completed), 1)