2010-03-15 7 views
1

premier code:Comment contrôler un processus subthread en python?

'''this is main structure of my program''' 

from twisted.web import http 
from twisted.protocols import basic 
import threading 

threadstop = False #thread trigger,to be done 
class MyThread(threading.Thread): 
    def __init__(self): 
     threading.Thread.__init__(self) 
     self.start() 

    def run(self): 
     while True: 
      if threadstop: 
       return 
      dosomething() 


'''def some function''' 

if __name__ == '__main__': 
    from twisted.internet import reactor 
    t = MyThread() 
    reactor.listenTCP(serverport,myHttpFactory()) 
    reactor.run() 

Comme mon premier programme multithread, je me sens heureux que cela fonctionne comme expected.But maintenant, je trouve que je ne peux pas contrôler it.If je le lance sur le devant, Ctrl + C ne peut arrêter la processus principal, et je peux toujours le trouver dans la liste des processus, si je l'exécute en arrière-plan, je dois utiliser kill -9 pid pour l'arrêter.Et je me demande s'il existe un moyen de contrôler le processus subthread par un déclencheur variale, ou un meilleur moyen de arrêter le processus entier autre que kill -9. Merci.

Répondre

2

Utilisez le module atexit pour enregistrer (dans le thread principal) une fonction qui a établi le threadstop mondial de True, ou, plus simplement, définissez l'attribut daemon de l'objet de fil à True il ne gardera pas le processus en vie si le thread principal se termine.

+1

+1 parce qu'Alex a besoin du représentant ... – msw

+0

Il fonctionne très bien, merci! – Young

+0

@SpawnCxy, heureux d'entendre cela! –

2

Ceci n'est pas une réponse directe à votre question et Alex a déjà répondu à votre question, mais voici une pensée.

Je vois que vous utilisez threading de python. Avez-vous essayé d'utiliser twisted.internet.threads?

Quand je me retrouve avec des fils dans une application twisted, je vais à twisted.internet.threads

+0

En tant que débutant de python et tordu, je ne suis pas encore familier avec ce framework. Et je vais vérifier cette classe, merci :) – Young