2016-08-26 3 views
0

У меня есть очередь промежуточного процесса, которая обычно пуста и только раз в то время что-то появляется в ней. В одной из моих потоков Я хочу, чтобы определить время цикла, как это:Использовать get_nowait() в python, не создавая пустое исключение

def mythread(queue1): 

    while (queue1.get_nowait() != 1): 
     #do stuff 

Это прекрасно работает до тех пор, пока очередь не пуста, которая быстро происходит в моем случае. Когда очередь пуста, вызов get_nowait() или get (False) вызывает исключение пустой очереди. Есть ли способ проверить очередь без блокировки И без повышения пустого исключения?

+0

Если вы не хотите блокировать, то что-то должно произойти, когда вы вызываете его в пустой очереди. Поймать исключение и обработать его. – mata

ответ

2

использование empty метод

if queue1.empty(): 
    pass 
else: 
    # get items from the queue 

Примечание: документ не говорит "не надежный" (не шучу).

Я предполагаю, что это потому, что он может вернуть True (очередь пуста), когда сообщение отправлено, поэтому операция не такая же атомная, как и для исключения исключения. Ну, а затем звонок get_nowait(). Я полагаю, что это не имеет значения, если какой-либо другой поток также может потреблять очередь, и в этом случае может возникнуть гоночное состояние, и при попытке прочитать из него очередь может быть пуста!

+0

хорошая идея, похоже, мне нужен еще один цикл в то время, когда я хочу – willpower2727