¿Cómo hacer que el método .empty () de la cola de multiprocesamiento de Python devuelva el valor correcto? O alternativas?
Tengo este fragmento que usa elQueue
clase de lamultiprocess
módulo. Estoy muy confundido de que el.empty()
método de una instancia deQueue
no me da un valor correcto como esperaría. Este es mi código:
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
Sin embargo, si uso elsleep
funcionar desdetime
, como en causa un retraso cronológico en la ejecución. Funciona.
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
Sé que mi alternativa es la.qsize() > 0
expresión, pero estoy seguro de que estoy haciendo esto de manera incorrecta.
¿Qué estoy haciendo mal?
*EDITAR*
Ahora entiendo que es esono fidedigno, gracias @Mathias Ettinger. ¿Alguna alternativa limpia? Necesito saber caliente para saber de manera confiable si miQueue
Está vacío o no.