2016-07-19 14 views
12

Ich sehe zwei Möglichkeiten, Timeouts in concurrent.futures anzugeben.Individuelle Timeouts für gleichzeitige.Futures

  • as_completed()
  • wait()

Beide Methoden behandeln laufenden Futures-N.

Ich möchte ein individuelles Timeout für jede Zukunft angeben.

Use Case:

  • Zukunft für Daten von DB bekommen hat einen Timeout von 0,5 Sekunden.
  • Die Zukunft für das Abrufen von Daten von einem HTTP-Server hat eine Zeitüberschreitung von 1,2 Sekunden.

Wie gehe ich mit concurrent.futures um? Oder ist diese Bibliothek nicht das richtige Werkzeug?

Fazit

Antwort

5

Wie über Ihre eigene Implementierung:

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

(oder eine while-Schleife mit Schlaf/Check oder mit kurzen Timeout warten)

+0

Ja, ich denke, das ist die einzige Lösung ist. Nicht nett, aber eine Arbeitsumgehung. Ich denke, ich werde das nächste Mal async io verwenden: https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep – guettli