Никогда не пытайтесь резко прекратить поток. Вместо этого установите флаг/сигнал в свой класс WorkerThread
, а затем, когда вы хотите, чтобы он остановил, просто установите флаг и сделайте поток завершенным сам по себе.
Также у вас есть недоразумения в отношении подкласса threading.Thread
. Если вы решили запустить функцию как нить, она должна быть:
thread = threading.Thread(target=my_func, args=(arg1, arg2...))
thread.start()
Ну, в вашем случае это не будет соответствовать вашим потребностям, так как вы хотите, чтобы нить, чтобы остановить при запросе. Итак, теперь давайте подкласс threading.Thread
, в основном __init__
как конструктор в python, каждый раз, когда создается экземпляр, он будет выполнен. И вы сразу же нажмете start()
поток, а затем заблокируете его join()
, что он делает в вашей петле для цикла threads.append(WorkerThread(running,file,count,len(fileTarget),"FindHeader"))
будет блокировать до конца running
, закончил с file
, а затем продолжает работать с другим file
, фактическая нить не используется.
Вы должны переместить ваш running(fileopen,methodRun)
в 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
установлен логический флаг, который блокирует блок выполнения резьбы, рано или поздно вы можете изменить состояние флага, позволяя нить, чтобы закончить свой бег метод чисто .... –
привет сэр, спасибо за ваше предложение, не могли бы вы показать некоторые коды, чтобы справиться с этим? От 2 до 4 строк кода. – iamcoder
Возможный дубликат [Есть ли способ убить поток в Python?] (Http://stackoverflow.com/questions/323972/is-there-any-way-to-kill-a-thread-in-python) –