(self, futures)
| 192 | self._wait_until_all_complete(futures_to_wait_on) |
| 193 | |
| 194 | def _wait_until_all_complete(self, futures): |
| 195 | # This is a basic implementation of the concurrent.futures.wait() |
| 196 | # |
| 197 | # concurrent.futures.wait() is not used instead because of this |
| 198 | # reported issue: https://bugs.python.org/issue20319. |
| 199 | # The issue would occasionally cause multipart uploads to hang |
| 200 | # when wait() was called. With this approach, it avoids the |
| 201 | # concurrency bug by removing any association with concurrent.futures |
| 202 | # implementation of waiters. |
| 203 | logger.debug( |
| 204 | '%s about to wait for the following futures %s', self, futures |
| 205 | ) |
| 206 | for future in futures: |
| 207 | try: |
| 208 | logger.debug('%s about to wait for %s', self, future) |
| 209 | future.result() |
| 210 | except Exception: |
| 211 | # result() can also produce exceptions. We want to ignore |
| 212 | # these to be deferred to error handling down the road. |
| 213 | pass |
| 214 | logger.debug('%s done waiting for dependent futures', self) |
| 215 | |
| 216 | def _get_all_main_kwargs(self): |
| 217 | # Copy over all of the kwargs that we know is available. |
no test coverage detected