Py学习  »  Vallentin Andriy Ivaneyko  »  全部回复
回复总数  2
7 年前
回复了 Vallentin Andriy Ivaneyko 创建的主题 » 强制退出运行python中的线程[duplicate]
from ctypes import *
pthread = cdll.LoadLibrary("libpthread-2.15.so")
pthread.pthread_cancel(c_ulong(t.ident))

T 是你的 Thread 对象。

阅读python源代码( Modules/threadmodule.c Python/thread_pthread.h )你可以看到 Thread.ident 是一个 pthread_t 打字,所以你可以做任何事 pthread 可以在python中使用 libpthread

7 年前
回复了 Vallentin Andriy Ivaneyko 创建的主题 » 强制退出运行python中的线程[duplicate]

在python中,不能直接杀死线程。

如果你真的不需要线程(!),而不是使用 threading package ,即使用 multiprocessing package . 在这里,要终止进程,只需调用方法:

yourProcess.terminate()  # kill the process!

python将终止您的进程(在unix上通过sigterm信号,而在windows上通过 TerminateProcess() 打电话)使用队列或管道时请注意使用!(它可能损坏队列/管道中的数据)

请注意 multiprocessing.Event 以及 multiprocessing.Semaphore 工作方式完全相同 threading.Event 以及 threading.Semaphore 分别是。事实上,第一批是Latters的克隆。

如果你真的需要使用线程,没有办法直接杀死它。但是,您可以做的是使用 “守护进程线程” . 实际上,在python中,线程可以标记为 守护进程 :

yourThread.daemon = True  # set the Thread as a "daemon thread"

当没有活动的非守护进程线程时,主程序将退出。换句话说,当主线程(当然是非守护进程线程)完成其操作时,即使仍有一些守护进程线程在工作,程序也将退出。

注意,有必要将线程设置为 daemon 之前 start() 方法被调用!

你当然可以也应该 守护进程 即使有 multiprocessing . 在这里,当主进程退出时,它会尝试终止其所有守护子进程。

最后,请注意 sys.exit() os.kill() 不是选择。