2016-08-05 13 views
0

der bekommen, dass die offiziellen Dokumente im Internet zu multiprocessing.Queue.get sindPython multiprocessing.Queue.put/Block-Parameter

get ([Block [, timeout]])

ausbauen und ein Element aus die Warteschlange. Wenn der optionale Argumentblock True (Standard) ist und das Timeout auf Keine eingestellt ist (standardmäßig ), blockieren Sie diese Option, bis ein Element available lautet. Wenn die Zeitüberschreitung eine positive Zahl ist, blockiert sie die meisten Timeout-Sekunden und löst die Warteschlange Queue.Empty aus, wenn innerhalb dieser Zeit kein Element verfügbar war. Andernfalls (Block ist False), geben Sie ein Element zurück, wenn eins immediately available ist, andernfalls heben Sie die Queue.Empty-Ausnahme auf (in diesem Fall wird das Timeout ignoriert ).

Die Frage ist, was ist der Unterschied zwischen available und immediately available ist

Vielen Dank im Voraus.

Antwort

1

Block, falls erforderlich, bis ein Element ist verfügbar

Dies bedeutet einfach Queue leer ist, wenn Sie den Antrag stellen, und es wird, bis Sie ein Element in die Queue hinzufügen blockiert werden, wenn Sie das Argument übergeben block = False oder setzen Sie einige Timeout.

sofort verfügbar

Das heißt, es gibt einige Artikel auf Queue, wenn Sie den Antrag stellen, und es wird unverzüglich zurückerstattet.

+0

Ich kann Ihre Idee bekommen, aber die Antwort oben ist klarer, also gebe ich ihm das richtige Etikett. –

1

Im ersten Fall, in dem block=True festgelegt ist, bedeutet "available", wenn ein Element in der Warteschlange vorhanden ist und durch Queue.get() entfernt werden kann. Der Punkt ist, dass der Thread/Prozess blockiert, bis ein Element bereit ist, aus der Warteschlange entfernt zu werden.

Im zweiten Fall, so block=False der anrufende Thread wird nicht Block, wenn es keinen Eintrag in der Warteschlange befindet (kein Element ist "immediately available" in der Warteschlange). Stattdessen wird Queue.get()Queue.Empty auslösen, um anzuzeigen, dass in der Warteschlange nichts zu lesen ist. Ihre Anwendung muss diese Ausnahme behandeln, möglicherweise indem sie andere Aufgaben ausführt und später erneut versucht.

+0

Hab es, vielen Dank –