Versuchen Sie niemals abrupt einen Thread zu beenden. Richten Sie stattdessen ein Flag/Signal in Ihrer Klasse WorkerThread
ein, und wenn Sie möchten, dass es aufhört, setzen Sie einfach die Markierung und machen Sie den Thread selbst fertig.
Auch Sie haben Missverständnisse darüber, wie man threading.Thread
Unterklasse. Wenn Sie sich entscheiden, eine Funktion als Thread ausgeführt, sollte es sein:
thread = threading.Thread(target=my_func, args=(arg1, arg2...))
thread.start()
Nun, dies in Ihrem Fall nicht für Ihre Bedürfnisse passen, da Sie den Faden wollen, wenn gebetene zu stoppen. So jetzt lassen Sie uns Unterklasse threading.Thread
, im Grunde __init__
ist wie ein Konstruktor in Python, jedes Mal, wenn eine Instanz erstellt wird, wird es ausgeführt werden. Und Sie sofort start()
der Faden und dann blockieren mit join()
, was sie tut, ist in der for-Schleife threads.append(WorkerThread(running,file,count,len(fileTarget),"FindHeader"))
blockiert bis zum Ende des running
fertig mit file
und geht dann mit einem anderen file
zu arbeiten, kein eigentlicher Faden verwendet wird.
sollten Sie bewegen running(fileopen,methodRun)
in run()
:
class WorkerThread(threading.Thread):
def __init__(self,*args):
super(WorkerThread,self).__init__()
self.arg_0 = arg[0]
self.arg_1 = arg[1]
...
self.stop = False
def run(self):
# now self.arg_0 is fileopen, and self.arg_1 is methodRun
# move your running function here
#....long task of code are here...
Try to do self.stop check every small interval, e.g.
...
if self.stop:
return
...
for file in fileTarget:
new_thread = WorkerThread(file, count, len(fileTarget), "FindHeader"))
new_thread.start()
threads.append(new_thread)
# Stop these threads
for thread in threads:
thread.stop = True
eine boolean-Flag gesetzt, der den Thread-Ausführungsblock sperrt, bald oder später können Sie den Zustand der Markierung ändern, lassen den Faden seinen Lauf beenden Methode sauber .... –
Hallo Herr, danke für Ihren Vorschlag konnten Sie einige Codes zeigen, um das zu handhaben? 2 bis 4 Zeilen Code wird ausreichen. – iamcoder
Mögliches Duplikat von [Gibt es eine Möglichkeit, einen Thread in Python zu beenden?] (Http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python) –