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.