¿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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta