|
11 | 11 | import weakref |
12 | 12 | from collections import deque |
13 | 13 | from collections.abc import Callable |
14 | | -from concurrent.futures import Future |
| 14 | +from concurrent.futures import Future, InvalidStateError |
| 15 | +from contextlib import suppress |
15 | 16 | from dataclasses import dataclass |
16 | 17 | from enum import Enum, auto |
17 | 18 | from functools import cached_property, partial |
@@ -66,15 +67,17 @@ def result(self, timeout=None): |
66 | 67 | # Drain any futures ahead of us in the queue. |
67 | 68 | while not self.done(): |
68 | 69 | future, get_response = self.futures_queue.pop() |
69 | | - future.update_with_response(get_response) |
| 70 | + future.wait_for_response(get_response) |
70 | 71 | return super().result() |
71 | 72 |
|
72 | | - def update_with_response(self, get_response: Callable): |
| 73 | + def wait_for_response(self, get_response: Callable): |
73 | 74 | try: |
74 | 75 | response = get_response() |
75 | | - self.set_result(response) |
| 76 | + with suppress(InvalidStateError): |
| 77 | + self.set_result(response) |
76 | 78 | except Exception as e: |
77 | | - self.set_exception(e) |
| 79 | + with suppress(InvalidStateError): |
| 80 | + self.set_exception(e) |
78 | 81 |
|
79 | 82 |
|
80 | 83 | class MultiprocExecutor(Executor): |
@@ -306,7 +309,7 @@ def get_response(): |
306 | 309 | # First drain any pending futures in the queue. |
307 | 310 | while self.futures_queue: |
308 | 311 | future, get_fut_response = self.futures_queue.pop() |
309 | | - future.update_with_response(get_fut_response) |
| 312 | + future.wait_for_response(get_fut_response) |
310 | 313 |
|
311 | 314 | return get_response() |
312 | 315 |
|
|
0 commit comments