Wie wird die .empty () -Methode von Pythons Multiprocessing Queue auf den korrekten Wert gesetzt? Oder Alternativen?

Ich habe dieses Snippet, das das @ verwendQueue Klasse aus demmultiprocess Modul. Ich bin sehr verwirrt, dass das.empty() Methode einer Instanz vonQueue gibt mir nicht den korrekten Wert, den ich erwarten würde. Das ist mein Code:

from time import sleep
from multiprocessing import Queue, Lock

foo = Queue()
locker = Lock()

with locker:  # even with this, still True
    foo.put("bar")

print(foo.empty())  # True, obviously not
print(foo.empty())  # True
print(foo.empty())  # True
print(foo.qsize())  # 1L
print(foo.empty())  # True

Jedoch, wenn ich das @ benutsleep Funktion vontime, da dies zu einer zeitlichen Verzögerung bei der Ausführung führt. Es klappt

from time import sleep
from multiprocessing import Queue, Lock

foo = Queue()
locker = Lock()

foo.put("bar")

sleep(0.01)

print(foo.empty())  # False
print(foo.empty())  # False
print(foo.empty())  # False
print(foo.qsize())  # 1L
print(foo.empty())  # False

Ich weiß, meine Alternative ist die.qsize() > 0 Ausdruck, aber ich bin sicher, dass ich das nur falsch mache.

Was mache ich falsch

*BEARBEITEN

Ich verstehe jetzt, dass esunzuverlässi, danke @Mathias Ettinger. Irgendwelche sauberen Alternativen? Ich muss es wissen, um zuverlässig zu erkennen, ob meinQueue ist leer oder nicht.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage