2009-11-06 11 views
0

Voici un extrait de code que je utilise dans une boucle:Qu'est-ce qui peut provoquer select à bloquer en Python?

while True: 
    print 'loop' 
    rlist, wlist, xlist = select.select(readers, [], [], TIMEOUT) 
    print 'selected' 
    # do stuff 

À un certain point, sélectionnez bloquera et « sélectionné » n'est jamais obtenir imprimé. Qu'est-ce qui peut causer ce comportement? Est-il possible qu'il y ait une sorte d'impasse?

MISE À JOUR: Je suis sous Linux Ubuntu et les objets lecteurs sont des sockets.

+0

Est-ce que le blocage dure plus longtemps que TIMEOUT secondes? –

+1

Oh oui. TIMEOUT est 0.1 –

Répondre

1

Quelques longshots ...

Si TIMEOUT se prépare à None, puis sélectionnez ne sera jamais délai d'attente. En outre, si les lecteurs deviennent une liste vide, select attendra toujours la valeur de timeout complète (ou se bloque si TIMEOUT est None)

2

Oui, en fonction de l'OS en question, il est en effet possible qu'un certain descripteur de fichier bloquer au niveau du système d'exploitation de manière non interruptible même si vous avez explicitement demandé qu'il soit non bloquant. Selon votre système d'exploitation, il existe peut-être des solutions de contournement à ces bogues (ou «dysfonctionnements») au niveau du système d'exploitation, mais pour nous aider à savoir exactement quel système d'exploitation est en jeu et quels types d'objets figurent dans la liste.

+0

Mis à jour. J'utilise Ubuntu Jaunty et les objets dans les lecteurs sont des sockets. –

+0

@Jason, bizarre - Je ne peux pas imaginer ce qui causerait de tels blocages dans votre excellent environnement d'exploitation. Peut-être voir si l'utilisation de select.poll ou select.epoll est une solution de contournement ...? –

Questions connexes