如何从 parent 中终止线程池?

How to kill a Threading pool from parent?

我的线程 classing 具有以下 运行 功能。 因此,当此 class 设置为 运行 时,它会继续检查多处理管理器队列,如果其中有任何内容,它会启动池以 运行 作业(跟踪功能)。作业完成后,池自动关闭,如果不为空,则整个队列开始检查。

def runQueue(self):
    print("The current thread is", threading.currentThread().getName())
    while True:
        time.sleep(1)
        self.pstate=False
        if self.runStop: #this stops the whole threading by dropping main loop
            break
        while not self.tasks.empty():
            self.pstate=True
            task = self.tasks.get()
            with ThreadPool(processes=1) as p: #<- want to kill this pool
                ans = p.apply(self.track, args=(task,))
                self.queueSend(ans)
                self.tasks.task_done()
    print("finished job")

我使用池是因为函数 returns 是我需要映射的值。我正在寻找的是这样一种方式,即在某些 parent 调用时,池通过删除作业关闭,同时保持主 class 线程(运行 函数 [main loop] 运行宁)。 感谢任何形式的帮助。

我发现对于我的情况 pool.terminate 仅适用于 I/O 个应用程序,我确实在网上找到了一些与池无关但我可以实施的解决方案。 一种解决方案是 运行 将线程作为多处理进程,然后调用 process.terminate() 或使用多处理池,然后调用 pool.terminate。
请注意,对于 CPU 密集型任务,多处理速度更快。如果任务是 I/O 密集线程是最好的解决方案。
我找到杀死线程的唯一方法是使用 win32 ctypes 模块。 如果你启动一个线程并得到它的 tid

tid thread.ident

然后你可以把你的 kill_thread(tid) 函数放在下面

w32 = ctypes.windll.kernel32
THREAD_TERMINATE = 1 
def kill_thread(tid):
        handle = w32.OpenThread(THREAD_TERMINATE, False,tid)
        result = w32.TerminateThread(handle, 0)
        w32.CloseHandle(handle)

希望这对某人有所帮助。