Индивидуальные тайм-ауты для concurrent.futures

Я вижу два способа указать тайм-ауты в concurrent.futures.

  • as_completed()
  • wait()

Оба метода обрабатывают N фьючерсов.

Я хотел бы указать индивидуальный тайм-аут для каждого будущего.

Случай использования:

  • Будущее для получения данных из БД имеет таймаут 0,5 с.
  • Будущее для получения данных с HTTP-сервера имеет тайм-аут в 1,2 секунды.

Как мне обрабатывать это с помощью concurrent.futures? Или эта библиотека не подходит?

Заключение

  • AFAIK решение mdurant - хорошая работа.
  • Я думаю, что в следующий раз я буду использовать другую библиотеку. Возможно, асинчио лучше поддерживает это. См.: https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep

Ответы

Ответ 1

Как реализовать свою собственную:

wait(dbfutures + httpfutures, timeout=0.5)
[fut.cancel() for fut in bdfutures if not fut.done()]
wait(httpfutures, timeout=0.7)
[fut.cancel() for fut in httpfutures if not fut.done()]

(или цикл while со сном/проверка или ожидание с коротким таймаутом)