macOS, возможно ли завершить один поток Python?

Я выполняю длинные вычисления на ноутбуке Jupyter, и один из потоков порождается python (pickle.dump позвоните, я подозреваю) забрал всю доступную оперативную память, сделав систему неуклюжей.

Теперь я хотел бы прекратить один поток. Прерывание работы ноутбука не работает, и я хотел бы не перезагружать ноутбук, чтобы не потерять все сделанные до сих пор вычисления. Если я открою Activity Monitor, я ясно вижу один процесс Python, который содержит несколько потоков.

Я знаю, что могу завершить весь процесс, но есть ли способ завершить один поток?

2 ответа

Решение

Я не думаю, что вы можете убить поток процесса вне самого процесса:

Как сообщается в этом ответе

Потоки являются неотъемлемой частью процесса и не могут быть уничтожены вне его. Здесь pthread_kill функция, но она применяется только в контексте thread itself, Из документов по ссылке

Конечно, ответ да, у меня есть демо-код FYI(небезопасно):

from threading import Thread
import time


class MyThread(Thread):
    def __init__(self, stop):
        Thread.__init__(self)
        self.stop = stop

    def run(self):
        stop = False
        while not stop:
            print("I'm running")
            time.sleep(1)
            # if the signal is stop, break `while loop` so the thread is over.
            stop = self.stop

m = MyThread(stop=False)
m.start()
while 1:
    i = input("input S to stop\n")
    if i == "S":
        m.stop = True
        break
    else:
        continue
Другие вопросы по тегам