是否有可能在不设置/检查任何标志/信号量/等的情况下终止正在运行的线程?
发布于 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
。
示例:
import multiprocessing
proc = multiprocessing.Process(target=your_proc_function, args=())
proc.start()
# Terminate the process
proc.terminate() # sends a SIGTERM
发布于 2008-11-27 15:08:07
没有官方的API可以做到这一点,没有。
您需要使用平台接口来杀死线程,例如pthread_kill或TerminateThread。您可以通过pythonwin或ctypes等方式访问此类API。
请注意,这本质上是不安全的。这可能会导致无法收集的垃圾(从堆栈帧的局部变量变成垃圾),并可能导致死锁,如果被杀死的线程在它被杀死时具有GIL。
发布于 2009-11-03 22:53:11
如果你试图终止整个程序,你可以将线程设置为“守护进程”。请参阅Thread.daemon
https://stackoverflow.com/questions/323972
复制相似问题