- finished: Mapping[int, bool] = {}
- x = 0
- while True:
- future = futures[x]
- if not finished.get(future.get_id(), False):
- if future.is_ready():
- finished[future.get_id()] = True
- yield future
- else:
- if callback is not None:
- callback()
- time.sleep(0.1)
- x += 1
- if x >= len(futures):
- x = 0
- if len(finished) == len(futures):
+ real_futures = []
+ smart_future_by_real_future = {}
+ completed_futures = set()
+ for _ in futures:
+ real_futures.append(_.wrapped_future)
+ smart_future_by_real_future[_.wrapped_future] = _
+ while len(completed_futures) != len(real_futures):
+ newly_completed_futures = concurrent.futures.as_completed(real_futures)
+ for f in newly_completed_futures: