Ich möchte alle Elemente in einer Warteschlange ziehen. Es gibt einen anderen Thread, der fortwährend Elemente in das andere Ende legt, und in jedem Zeitraum möchte ich alle Elemente, die gerade in der Warteschlange sind, erhalten.Bevorzugte Methode zum Leeren von multiprocessing.queue (-1) in Python
Gibt es einen Grund zu bevorzugen:
res = []
while q.qsize > 0 :
res.append(q.get())
oder
res = []
while True :
try :
res.append(q.get(block=False))
except Queue.Empty :
break
Nun sind die speziell docs sagen, dass die WGröße()> 0 wird die Warteschlange nicht daran hindern, ein Get blockiert, aber Ist dies nur in dem Fall der Fall, wenn mehrere Threads von der Ausgabe genommen werden können?
Warteschlange. qsize() Geben Sie die ungefähre Größe der Warteschlange an. Beachten Sie, qsize()> 0 garantiert nicht, dass eine nachfolgende get() wird nicht blockiert, noch wird qsize() < maxsize Garantie, dass put() wird nicht blockiert.
Bedeutet dies, dass die zweite Form immer bevorzugt werden sollte? EAFP und all das? Gibt es irgendwelche Kosten für den Aufruf von q.qsize()? Blockiert es das andere Ende der Warteschlange, um zu zählen?
Ich denke, ich habe mich in die zweite Form überreden, aber es scheint mir viel weniger sauber zu sein.