2016-07-24 22 views
0

Ich muss in der Lage sein, eine Stop-Funktion eines laufenden Threads aufzurufen. Ich habe mehrere Wege versucht, dies zu erreichen, aber bisher kein Glück. Ich denke, ich brauche eine Thread-ID, aber ich habe keine Ahnung, wie das gemacht wird.kann Thread von einem Modul nicht stoppen

entsprechenden Code: Modell:

import MODULE 
class do_it(): 
    def __init__(self): 
     self.on_pushButton_start_clicked() 
     return 

    def on_pushButton_start_clicked(self): 
     self.Contr = MODULE.Controller() 
     self.Contr.start() 

    def on_pushButton_stop_clicked(self): 
     if self.Contr: 
      self.Contr.stop() 
      self.Contr = None 
     return 

Modul:

import thread 
class Controller(): 
    def __init__(self): 
     self.runme = False 

    def start(self): 
     """Using this to start the controllers eventloop.""" 
     thread.start_new_thread(self._run,()) 

    def stop(self): 
     """Using this to stop the eventloop.""" 
     self.runme = False 

    def _run(self): 
     """The actual eventloop""" 
     self.runme = True 

ich mein Problem denke hier liegt ...
mein Controller:

"""I want to use this to control my model, that in turn controls the module""" 

    def start_module(): 
     start=do_it().on_pushButton_start_clicked() 
    return 'Ran start function' 

    def stop_module(): 
     stop=do_it().on_pushButton_stop_clicked() 
    return 'Ran stop function' 

Antwort

0

die thread Bezüglich Modul, das ist, was die Dokumente sa y:

Dieses Modul bietet Low-Level-Primitiven für die Arbeit mit mehreren Threads [...] Die threading Modul eine einfacher zu bedienen und geordneten threading API für dieses Moduls gebaut bietet.

Außerdem gibt es keine Möglichkeit, einen Thread zu stoppen oder zu beenden, sobald er gestartet wurde. This SO Frage geht weiter ins Detail und zeigt, wie Sie eine threading.Event verwenden, um eine stoppbare Thread zu implementieren. Der einzige Unterschied ist ein daemon thread, der automatisch beendet wird, wenn Ihr Hauptprogramm existiert.

+0

Vielen Dank für Ihre Eingabe! Ich habe das Dokument gelesen und versucht, Threading zu verwenden (erfolglos wegen fehlender Kenntnisse und Erfahrungen). Ich stieß auf eine ähnliche Frage wie die, die du suchst. Ich denke, dass der obere Teil der am meisten gewählten Antwort ist, was für mich arbeiten würde; Ich habe jedoch keine Ahnung, wie ich es in meiner Situation umsetzen kann. Was soll ich als Argument übergeben, wenn ich StoppableThread (threading.Thread) aufruft? – Ivo