@@ -12,7 +12,7 @@ The `concurrent.futures` module provides high-level interfaces for asynchronousl
1212| ` executor.submit(fn, *args) ` | O(1) | O(1) | Submit task to queue |
1313| ` executor.map(fn, iterable) ` | O(n) | O(n) | Submit all tasks, n = item count |
1414| ` Future.result() ` | O(1) | O(r) | Get result, r = result size |
15- | ` as_completed(futures) ` | O(n log n) | O(n) | Heap-based iteration; yields as each completes |
15+ | ` as_completed(futures) ` | O(n log n) | O(n) | Sorts futures by id for lock ordering, then event-based iteration |
1616| ` wait(futures) ` | O(n) | O(n) | Wait for futures |
1717| ` Executor ` creation | O(1) | O(1) | Base class init |
1818| ` Future ` creation | O(1) | O(1) | Pending future |
@@ -185,9 +185,9 @@ executor = ThreadPoolExecutor(max_workers=4)
185185# Submit all tasks: O(n)
186186futures = [executor.submit(task, i) for i in range (100 )] # O(n)
187187
188- # Get futures as they complete: O(n log n) for sorting
189- # (maintains heap of pending futures )
190- for future in as_completed(futures): # O(n log n) time
188+ # Get futures as they complete: O(n log n) overall
189+ # (initial lock-order sorting + event-based waiter )
190+ for future in as_completed(futures): # O(n log n) total
191191 result = future.result() # O(1) per future
192192 process(result)
193193```
@@ -293,7 +293,7 @@ def process_with_timeout(items, timeout=30):
293293 # Submit all: O(n)
294294 futures = {executor.submit(task, item): item for item in items}
295295
296- # Wait with timeout: O(n)
296+ # Wait with timeout: O(n log n) overall
297297 try :
298298 for future in as_completed(futures, timeout = timeout): # O(n log n)
299299 result = future.result()
0 commit comments