2017-05-19 1 views
1

J'ai des problèmes pour comprendre comment je peux définir un délai d'attente pour un canal iddle. J'ai trouvé cette réponse:Python Pika canal de déconnexion sur iddle

Stop channel.basic_consume if the connection is idle/Not consuming from long time

Mais la timer_id variable devient hors de portée dans ma méthode ON_MESSAGE.

Existe-t-il un moyen de déconnecter un canal quand aucun message n'est arrivé à la file d'attente dans un temps donné?

Merci pour votre aide

Répondre

0

sûr que je peux vous aider. Pour de telles situations, j'ai choisi d'utiliser une méthode channel.consume(), cette méthode renvoie un itérateur de (méthode, propriétés, corps) et quand la file d'attente est vide et le délai dépassé, elle renvoie un (None, None, None) tuple. Il suffit de vérifier pour ne pas et aucun bam! là, vous avez votre méthode de fermeture plus une déconnexion:

for method, prop, body in channel.consume(queue='Q_test_timeout', 
              no_ack=True, 
              exclusive=True, 
              inactivity_timeout=3): 

Docs

+0

s'il vous plaît également envelopper ce générateur dans un try/except pour attraper l'exception du délai d'attente depuis lors délai d'attente est atteint, un simple None est retourné, ce qui rend l'assignation des variables à l'échec. –