web-dev-qa-db-fra.com

Comment puis-je tuer un fil dans python=

Je commence un fil à l'aide du code suivant.

t = thread.start_new_thread(myfunction)

Comment puis-je tuer le fil t d'un autre fil. Donc essentiellement parler en termes de code, je veux pouvoir faire quelque chose comme ça.

t.kill()

Notez que j'utilise Python 2.4.

8
pythonic

Si votre thread est occupé à exécuter Python code, vous avez un problème plus gros que l'incapacité de le tuer. Le gil empêchera tout autre fil de gérer même les instructions que vous utiliseriez pour faire le meurtre. (Après un peu de recherche, j'ai appris que l'interprète libère périodiquement le gil. La déclaration précédente est de faux. Le commentaire restant est cependant.)

Votre fil doit être écrit de manière coopérative. C'est-à-dire que cela doit vérifier périodiquement avec un objet de signalisation tel qu'un sémaphore, que le thread principal peut utiliser pour indiquer au fil de travail de sortir volontairement.

while not sema.acquire(False):
    # Do a small portion of work…

ou:

for item in work:
    # Keep working…
        # Somewhere deep in the bowels…
        if sema.acquire(False):
            thread.exit()
10
Marcelo Cantos

Vous ne pouvez pas tuer un fil d'un autre fil. Vous devez signaler à l'autre fil que cela devrait terminer. Et par "signal", je ne veux pas dire utiliser la fonction signal, je veux dire que vous devez organiser une certaine communication entre les threads.

7
Ned Batchelder