2016-07-19 26 views
12

Widzę dwa sposoby określania limitów czasu w concurrent.futures.Indywidualne limity czasu dla concurrent.futures

  • as_completed()
  • wait()

obu metod obsługi N uruchomione przyszłości.

Chciałbym określić indywidualny limit czasu dla każdej przyszłości.

przypadków użycia:

  • przyszłość dla pobierania danych z DB ma limit czasu 0,5 sek.
  • Przyszłość pobierania danych z serwera HTTP ma limit czasu wynoszący 1,2 s.

Jak sobie z tym poradzić z concurrent.futures? Czy ta biblioteka nie jest właściwym narzędziem?

Wnioski

Odpowiedz

5

Jak o realizację własnych:

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()] 

(lub pętli while ze snu/sprawdzić czy czekać z krótkim timeout)

+0

Tak, myślę, że jest to jedyne rozwiązanie. Niezbyt ładne, ale pracujące dookoła. Myślę, że użyję async io następnym razem: https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep – guettli