-2 python multithreading kill func
在这段代码中
杀=假
a = tr.Thread(target=func, args=(a, b, Kill), daemon=True)
a.start()
这是一个 tkinter 应用程序,所以我如何杀死这个线程,就像用什么命令来做到这一点。
小智 5
有不同的方法kill可以thread
global variable stop_threads设置了,target function run()就可以使用 t1.join() 来终止线程 t1 和结束。但由于某些原因,人们可能会避免使用全局变量。对于这些情况,可以传递函数对象来提供类似的功能,如下所示。# Python program killing
# threads using stop
# flag
import threading
import time
def run(stop):
while True:
print('thread running')
if stop():
break
def main():
stop_threads = False
t1 = threading.Thread(target = run, args =(lambda : stop_threads, ))
t1.start()
time.sleep(1)
stop_threads = True
t1.join()
print('thread killed')
main()
Run Code Online (Sandbox Code Playgroud)
上面代码中传递的函数对象始终返回local variable stop_threads. 该值在函数 run() 中检查,一旦stop_threads重置,run()函数就会结束并且线程可以被杀死。
# Python program using
# traces to kill threads
import sys
import trace
import threading
import time
class thread_with_trace(threading.Thread):
def __init__(self, *args, **keywords):
threading.Thread.__init__(self, *args, **keywords)
self.killed = False
def start(self):
self.__run_backup = self.run
self.run = self.__run
threading.Thread.start(self)
def __run(self):
sys.settrace(self.globaltrace)
self.__run_backup()
self.run = self.__run_backup
def globaltrace(self, frame, event, arg):
if event == 'call':
return self.localtrace
else:
return None
def localtrace(self, frame, event, arg):
if self.killed:
if event == 'line':
raise SystemExit()
return self.localtrace
def kill(self):
self.killed = True
def func():
while True:
print('thread running')
t1 = thread_with_trace(target = func)
t1.start()
time.sleep(2)
t1.kill()
t1.join()
if not t1.isAlive():
print('thread killed')
Run Code Online (Sandbox Code Playgroud)
在此代码中, start()稍加修改即可使用settrace(). 本地跟踪函数的定义是,每当设置各自的终止标志(killed)时thread,在执行下一行代码时会引发 SystemExit 异常,从而结束目标函数 func 的执行。现在可以使用 来终止该线程 join()。
| 归档时间: |
|
| 查看次数: |
6443 次 |
| 最近记录: |