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