Comment résilier Python fil sans checking en permanence
class My_Thread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
print "Starting " + self.name
cmd = [ "bash", 'process.sh']
p = subprocess.Popen(cmd,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT)
for line in iter(p.stdout.readline, b''):
print ("-- " + line.rstrip())
print "Exiting " + self.name
def stop(self):
print "Trying to stop thread "
self.run = False
thr = My_Thread()
thr.start()
time.sleep(30)
thr.stop()
thr.join()
J'ai donc thread comme montrer ci-dessus, en fait de travailler sur windows et process.sh est script bash qui courent dans cygwin, et prend environ 5 min pour terminer l'exécution de sorte que son pas une boucle de ses simulation proecess
je veux créer de la fonction stop() de cette classe, de sorte que je peux résilier le script immédiatement quand je veux. après la résiliation, je suis ne s'attend à aucun résultat utile de process.sh script
veuillez u peut suggérer une méthode, Si possible, veuillez donner quelques explications trop..
Double Possible de Est-il possible de tuer un Thread en Python?
OriginalL'auteur Ganesh Gore | 2013-04-28
Vous devez vous connecter pour publier un commentaire.
Pour votre exemple précis, il est probablement plus facile de résilier le thread en mettant fin à la sous-processus qu'il engendre à l'aide de la
Popen
de l'objetterminate()
méthode......causant un
SIGTERM
être envoyé àbash
, et le prochain appel àp.stdout.readline()
de soulever une exception, ce qui mettra fin à la discussion.Il enverra
SIGTERM
àbash
provoquantbash
à la fin.K cela a Fonctionné merci
Comment puis-je appeler ce stop() de l'autre classe qui a mon interface graphique Tkinter Bouton
Vous devez inclure le code, mais il est probablement préférable d'ouvrir une nouvelle question, puisque c'est un problème différent.
OriginalL'auteur Aya
Python les threads ne sont pas faciles à tuer, vous pouvez utiliser le module multiprocessing (http://docs.python.org/2/library/multiprocessing.html) qui est presque la même et il a terminate() de la fonction pour le meurtre d'un processus.
Voici un exemple, pris dans le python docs.
OriginalL'auteur nacholibre