2016-08-26 6 views
0

J'ai une file d'attente inter-processus qui est généralement vide et quelque chose n'apparaît que de temps en temps. Dans l'un de mes fils, je veux définir une boucle while comme ceci:Utiliser get_nowait() en python sans lever l'exception vide

def mythread(queue1): 

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

Cela fonctionne très bien jusqu'à ce que la file d'attente est vide, ce qui arrive rapidement dans mon cas. Lorsque la file d'attente est vide, appeler get_nowait() ou get (False) déclenche l'exception de file d'attente vide. Est-il possible de vérifier la file d'attente sans bloquer ET sans lever l'exception vide?

+0

Si vous ne voulez pas bloquer, alors quelque chose doit arriver lorsque vous l'appelez dans une file d'attente vide. Attrapez l'exception et manipulez-la. – mata

Répondre

2

utilisation empty méthode

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

Note: doc dit "non fiable" (sans blague).

Je suppose que c'est parce qu'il peut retourner True (file d'attente est vide) pendant qu'un message est posté, donc l'opération n'est pas aussi atomique qu'attraper l'exception. Eh bien, suivi par un appel get_nowait() je suppose que cela n'a pas d'importance à moins que d'autres threads puissent aussi consommer la file, auquel cas une condition de course pourrait se produire et la file d'attente pourrait être vide lorsque vous essayez de lire!

+0

bonne idée, on dirait que j'ai besoin d'une autre boucle en plus de celle que je veux – willpower2727