Как заставить метод .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
пусто или нет.