Maison  >  Article  >  développement back-end  >  Comment implémenter l'arrêt et la suspension des threads en Python

Comment implémenter l'arrêt et la suspension des threads en Python

不言
不言original
2018-09-11 15:59:425716parcourir
Ce que cet article vous apporte concerne la méthode d'implémentation de terminaison et de suspension des threads en Python. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Il n'existe aucune méthode permettant de mettre fin ou de suspendre de force un fil de discussion. C'est intentionnel, car l'écriture de programmes threadés est intrinsèquement complexe. Par exemple : si un thread a acquis un verrou, le forcer à le terminer ou à le suspendre avant de pouvoir libérer le verrou entraînera un blocage dans l'ensemble de l'application. De plus, la terminaison ne peut généralement pas simplement « libérer tous les verrous », car la synchronisation complexe des threads implique souvent des opérations de verrouillage et d'effacement du verrouillage, et l'ordre de ces opérations doit être très précis lors de leur exécution.

Si vous souhaitez fournir des services de résiliation ou de suspension, vous devez créer ces fonctions vous-même. Une approche courante consiste à exécuter le thread dans une boucle qui vérifie périodiquement son état pour déterminer s'il doit se terminer. Par exemple :
from threading import  Thread,Lock
class StoppableThread(Thread):
    def __init__(self):
        Thread.__init__(self)
        self._terminate=False
        self._suspend_lock=Lock()

    def terminate(self):
        self._terminate=True

    def suspend(self):
        self._suspend_lock.acquire()

    def resume(self):
        self._suspend_lock.release()

    def run(self):
        while True:
            if self._terminate:
                break
            self._suspend_lock.acquire()
            self._suspend_lock.release()
            ...

N'oubliez pas que pour que cette méthode fonctionne de manière fiable, les threads doivent être extrêmement prudents et ne pas effectuer d'opérations d'E/S bloquantes. Par exemple, si un thread bloque l'attente de l'arrivée des données, il ne se terminera pas tant que l'opération ne se réveillera pas. Par conséquent, vous devez utiliser des délais d'attente, des E/S non bloquantes et d'autres fonctionnalités avancées dans la pratique pour garantir que les contrôles de terminaison sont effectués suffisamment fréquemment.

Recommandations associées :

Explication détaillée de l'exemple de code de fin de tâche du pool de threads Threadpool en python

Thèmes multithread et threading dans la méthode d'implémentation Python

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn