2016-07-19 200 views
12

Vedo due modi per specificare i timeout in concurrent.futures.Timeout individuali per concurrent.futures

  • as_completed()
  • wait()

Entrambi i metodi maniglia N future esecuzione.

Vorrei specificare un singolo timeout per ciascun futuro.

caso d'uso:

  • futuro per ottenere i dati da DB ha un timeout di 0,5 secondi.
  • Il futuro per ottenere dati da un server HTTP ha un timeout di 1,2 secondi.

Come gestirlo con concurrent.futures? O questa libreria non è lo strumento giusto?

Conclusione

risposta

5

ne dite di implementare il proprio:

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

(o un ciclo while con il sonno/CHECK o attendere con breve timeout)

+0

Sì, penso che questa è l'unica soluzione. Non è bello, ma funziona in modo approssimativo. Penso che userò async io la prossima volta: https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep – guettli