gpt4 book ai didi

python线程以最好的方式终止或杀死

转载 作者:行者123 更新时间:2023-11-30 22:42:27 25 4
gpt4 key购买 nike

问题是我想杀死当前正在运行的所有线程。例如,我有一个调用 for 循环的按钮。突然我想停止它。

这是我的代码:

class WorkerThread(threading.Thread):
def __init__(self,t,*args):
super(WorkerThread,self).__init__(target=t,args=(args[0],args[3]))
self.start()
self.join()

我的实现:

def running(fileopen,methodRun):
#....long task of code are here...


for file in fileTarget:
threads.append(WorkerThread(running,file,count,len(fileTarget),"FindHeader"))

最佳答案

永远不要尝试突然终止线程。而是在您的 WorkerThread 类中设置一个标志/信号,然后当您希望它停止时,只需设置该标志并执行线程自行完成。

您对如何子类化threading.Thread也存在误解。如果您决定将函数作为线程运行,则应该是:

thread = threading.Thread(target=my_func, args=(arg1, arg2...))
thread.start()

好吧,就您而言,这不适合您的需求,因为您希望线程在收到请求时停止。现在让我们子类化threading.Thread,基本上__init__就像Python中的构造函数,每次创建实例时都会执行它。然后您立即 start() 线程,然后使用 join() 阻止它,它的作用是在 for 循环中 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

关于python线程以最好的方式终止或杀死,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42131668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com