首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有什么方法可以杀死线程吗?

有什么方法可以杀死线程吗?
EN

Stack Overflow用户
提问于 2008-11-27 14:55:54
回答 23查看 1M关注 0票数 893

是否有可能在不设置/检查任何标志/信号量/等的情况下终止正在运行的线程?

EN

回答 23

Stack Overflow用户

发布于 2011-10-13 17:38:20

multiprocessing.Process可以p.terminate()

在我想要杀死一个线程,但又不想使用flags/locks/signals/semaphores/events/whatever,的情况下,我会将线程提升到完全成熟的进程。对于只使用几个线程的代码来说,开销并不是那么糟糕。

例如,这可以方便地终止执行阻塞I/O的帮助器“线程”

转换很简单:在相关代码中,将所有threading.Thread替换为multiprocessing.Process,将所有queue.Queue替换为multiprocessing.Queue,并将所需的p.terminate()调用添加到要杀死其子p的父进程中

请参阅Python documentation for multiprocessing

示例:

代码语言:javascript
复制
import multiprocessing
proc = multiprocessing.Process(target=your_proc_function, args=())
proc.start()
# Terminate the process
proc.terminate()  # sends a SIGTERM
票数 133
EN

Stack Overflow用户

发布于 2008-11-27 15:08:07

没有官方的API可以做到这一点,没有。

您需要使用平台接口来杀死线程,例如pthread_kill或TerminateThread。您可以通过pythonwin或ctypes等方式访问此类API。

请注意,这本质上是不安全的。这可能会导致无法收集的垃圾(从堆栈帧的局部变量变成垃圾),并可能导致死锁,如果被杀死的线程在它被杀死时具有GIL。

票数 132
EN

Stack Overflow用户

发布于 2009-11-03 22:53:11

如果你试图终止整个程序,你可以将线程设置为“守护进程”。请参阅Thread.daemon

票数 93
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/323972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档