Python fil de démon ne quittez lorsque le parent quitte thread
J'ai du code Python qui crée un démon fil. Le parent thread se termine presque immédiatement, mais le fil de démon garde l'impression de dormir.
import threading
import time
def int_sleep():
for _ in range(1, 600):
time.sleep(1)
print("sleep")
def main():
thread = threading.Thread(target=int_sleep)
thread.daemon = True
thread.start()
time.sleep(2)
print("main thread end...")
thread = threading.Thread(target=main)
thread.start()
sys.version:
'3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:19:30) [MSC v.1600 64 bit (AMD64)]'
Imprime:
sleep
main thread end...
sleep
sleep
sleep
Pourquoi ne pas le Python fil de démon quittez lorsque le parent quitte thread?
Découvrez le fil.démon de réglage .. stackoverflow.com/questions/4330111/...
OriginalL'auteur yeren1989 | 2014-02-18
Vous devez vous connecter pour publier un commentaire.
Si vous spécifiez
thread.daemon = True
pour votre python fil, puis le programme s'arrête immédiatement lorsque seul le démon est à gauche. Les commandes envoyées sur la sortie standard stdout sont perdus.L'ajouter à un fichier appelé main.py
L'exécuter comme ceci:
Voir il imprime rien parce que le fil a commencé. Vous définissez à être un démon et a commencé. Ensuite, le programme terminé.
Notes supplémentaires: Si vous collez ce code dans un interpréteur python, toutes les instructions d'impression apparaît sur le terminal, car le démon ne perd jamais tenir de sa connexion sur la sortie standard stdout.
Lire la suite: http://docs.python.org/2/library/threading.html
Hey, j'ai essayé de lancer ce script, et tout ce qui a été imprimé...
C'est parce que vous l'avez collé dans un terminal, et non pas comme un programme, j'ai expliqué ce phénomène ci-dessus.
Le code supplémentaire fournie dans cette réponse est fausse, la vraie réponse à la question de départ est que, dans l'interpréteur Python permet aux non-sortie de comportement, alors que l'exécution comme un script donne un comportement attendu.
OriginalL'auteur Eric Leschinski
Pour la vérification de l'exhaustivité de cette article.
https://joeshaw.org/2009/02/24/605/
Je ne suis pas sûr de savoir si c'est un bug qui a été corrigé ou un bug encore en existence ou le comportement que par leur design. Mais si vous voyez quelque chose d'étrange garder cela à l'arrière de votre tête.
Donc une alternative consiste à effectuer une boucle dans l'enfant du fil sur la sortie du drapeau que vous pouvez définir dans le principal lorsque vous avez terminé. Ensuite, attendre dans la main de l'enfant du fil à mourir et à nettoyer.
OriginalL'auteur demented hedgehog
Je ne peux que reproduire le comportement décrit par l'OP (sans fin sortie de "veille") si fait à partir de l'interface python. Si vous exécutez à partir d'un fichier qu'il fonctionne comme prévu (quelques lignes de "veille" et une seule ligne de " thread principal fin...")
De la même façon, le deuxième programme s'arrête immédiatement si vous exécutez un fichier, MAIS aussi des impressions sans fin en mode "veille" des déclarations lors de l'exécuter à partir de l'interface python.
Ma conclusion: depuis le thread qui est le python shell continue à fonctionner même après "principal", les finitions, la prévention du démon(s) de se terminer lorsqu'il est exécuté à partir de l'interface python.
Cela pourrait-il être considéré comme un bug (j'.e que Python a un comportement différent selon la façon dont le script est exécuté) ou est-il prévu ? Je reporte à plus expérimenté Pythoneux...
BTW - testé avec Python 3.2.3
OriginalL'auteur dej