Les Fils De Démon Explication
Dans le La documentation Python
il dit:
Un thread peut être marqué comme un "fil de démon". L'importance de cette
le drapeau est que la totalité du programme en Python ferme lorsque seuls les fils de démon
sont de gauche. La valeur initiale est héritée de la création de thread.
Quelqu'un a une explication plus claire de ce que cela signifie ou un exemple concret montrant l'endroit où vous voulez définir des threads comme daemonic
?
À clarifier pour moi:
de sorte que le seul moment où vous ne serait pas ensemble de threads que le démoniaque est si vous voulait continuer à courir après le thread principal issues de secours?
Vous devez vous connecter pour publier un commentaire.
Certains threads n'tâches en arrière-plan, comme l'envoi de paquets persistants, ou d'effectuer régulièrement la collecte des ordures, ou quoi que ce soit. Ces ne sont utiles que lorsque le programme est en cours d'exécution, et il est normal de les tuer une fois l'autre, la non-démon, les threads ont quitté.
Sans fils de démon, vous auriez à garder une trace d'eux, et leur dire de quitter, avant que votre programme peut quitter complètement. En les définissant comme des fils de démon, vous pouvez les laisser courir et de les oublier, et quand votre programme se ferme, tout les fils de démon sont tués automatiquement.
None
dans ce cas, mais il n'a pas d'importance, la valeur de retour n'est pas utilisé.join()
ed l'enfant.Disons que vous êtes à faire un widget dashboard. Dans ce cadre, vous souhaitez afficher le nombre de messages non lus dans votre boîte e-mail. Afin de vous faire un petit thread:
Lorsque votre widget démarre, il serait de créer ce fil, désigner un démon, et le démarrer. Parce que c'est un démon, vous n'avez pas à penser à ce sujet; lorsque votre widget de sortie, le thread s'arrête automatiquement.
Un moyen plus simple de penser à ce sujet, peut-être: en cas de retours, de vos processus ne sera pas quitter si il y a des non-fils de démon toujours en cours d'exécution.
Un peu de conseils: Nettoyer arrêt est facile de se tromper lorsque les threads et la synchronisation sont impliqués - si vous pouvez l'éviter, faites-le. Utiliser les fils de démon à chaque fois que possible.
D'autres affiches ont donné des exemples de situations dans lesquelles vous pouvez utiliser les fils de démon. Ma recommandation, cependant, est de ne jamais les utiliser.
Ce n'est pas parce qu'ils ne sont pas utiles, mais parce qu'il y a quelques mauvais effets secondaires que vous pouvez rencontrer si vous les utilisez. Les fils de démon peut encore s'exécuter après l'exécution Python commence à abattre les choses dans le thread principal, à l'origine de certaines assez bizarre exceptions.
Plus d'infos ici:
https://joeshaw.org/python-daemon-threads-considered-harmful/
https://mail.python.org/pipermail/python-list/2005-February/343699.html
Strictement parlant, vous n'avez jamais besoin d'eux, c'est juste de la mise en œuvre plus facile dans certains cas.
Chris déjà expliqué ce que les fils de démon sont, donc, nous allons parler de l'utilisation pratique. Beaucoup de pool de threads implémentations utilisent les fils de démon pour les travailleurs à la tâche. Les travailleurs sont les threads qui exécutent les tâches de la tâche de la file d'attente.
Travailleur doit garder en attente pour les tâches en file d'attente des tâches indéfiniment, comme ils ne savent pas quand la nouvelle tâche apparaît. Thread qui assigne des tâches (dire thread principal) ne connaît que lorsque les tâches sont terminées. Thread principal attend sur la tâche de la file d'attente à se vider, puis se ferme. Si les travailleurs sont des threads utilisateur c'est à dire non-démon, le programme ne sera pas résilié. Il va garder en attente pour ces indéfiniment l'exécution de travailleurs, même si les travailleurs ne sont pas quelque chose d'utile. Marque travailleurs fils de démon, et le thread principal sera de prendre soin de les tuer dès que c'est fait, les tâches de manipulation.
Citant Chris: "... lorsque votre programme se ferme, tout les fils de démon sont tués automatiquement.". Je pense qu'il résume. Vous devez être prudent lorsque vous les utilisez comme ils brusquement fin lorsque le programme principal s'exécute à la fin.
Lors de votre deuxième thread est non-Démon, votre principale de l'application thread principal ne peut pas arrêter à cause de ses critères de sortie est liée à la sortie de la non-Démon thread(s). Les Threads ne peuvent pas être contraints de tués en python, par conséquent, votre application va vraiment attendre pour les non-Démon fil(s) de sortie. Si ce comportement n'est pas ce que vous voulez, puis réglez votre deuxième thread comme démon afin qu'il ne vous retenez pas votre demande de sortir.