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.