Como fazer com que o método .empty () da fila de multiprocessamento do Python retorne o valor correto? Ou alternativas?

Eu tenho esse trecho que usa oQueue classe domultiprocess módulo. Estou muito confuso que o.empty() método de uma instância deQueue não me dá um valor correto como eu esperaria. Este é o meu 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

No entanto, se eu usar osleep função detime, como causa um atraso cronológico na execução. 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

Eu sei que minha alternativa é a.qsize() > 0 expressão, mas tenho certeza de que estou fazendo isso de maneira errada.

O que estou fazendo errado?

*EDITAR*

Eu entendo agora é issonão confiável, obrigado @Mathias Ettinger. Alguma alternativa limpa? Preciso saber quente para dizer com segurança se meuQueue está vazio ou não.

questionAnswers(2)

yourAnswerToTheQuestion