Как заставить метод .empty () многопроцессорной очереди Python возвращать правильное значение? Или альтернативы?

У меня есть этот фрагмент, который используетQueue класс изmultiprocess модуль. Я очень смущен тем, что.empty() метод экземпляраQueue не дает мне правильное значение, как я ожидал. Это мой код:

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

Однако, если я используюsleep функция отtime, как в случае хронологической задержки в исполнении. Оно работает.

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

Я знаю, что моя альтернатива.qsize() > 0 выражение, но я уверен, что я просто делаю это неправильно.

Что я делаю неправильно?

*РЕДАКТИРОВАТЬ*

Теперь я понимаю, что это такненадежныйСпасибо @Mathias Ettinger. Есть ли чистые альтернативы? Мне нужно знать, горячо, чтобы надежно сказать, если мойQueue пусто или нет.

Ответы на вопрос(2)

Ваш ответ на вопрос