#python #exception #python-asyncio #future
#python #исключение #python-asyncio #будущее
Вопрос:
Я проверяю, все ли мои фьючерсы выполнены таким образом:
futures = []
for i, img in enumerate(imgs):
futures.append(
asyncio.ensure_future(_process_img(i, img))
)
in_progress = True
last_update_at = datetime.utcnow()
while in_progress:
in_progress = not all(f.done() for f in futures)
Дело в том, что если исключение произошло в будущем, оно все равно будет выполнено.
Мой вопрос — могу ли я как-то проверить наличие исключения в будущем? (Желательно, не ожидая этого)
Ответ №1:
Этот код неверен:
while in_progress:
in_progress = not all(f.done() for f in futures)
Он запускает цикл, который ничего не ожидает и, следовательно, не позволяет запускать другие задачи (или сам цикл событий). В результате ни один из фьючерсов не получит шанса на завершение и in_progress
всегда будет оставаться true .
Правильный способ ожидания фьючерсов — использовать asyncio.wait()
:
# wait until all futures complete
await asyncio.wait(futures)
Могу ли я как-то проверить наличие исключения в будущем?
Вы можете использовать exception()
метод для объекта future, чтобы проверить, вызвал ли future исключение.
Комментарии:
1. Это не полный код, так что не волнуйтесь, он работает. Но спасибо за
exception()
метод, я попробую его