macOS, возможно ли завершить один поток Python? - PullRequest
0 голосов
/ 11 января 2019

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

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

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

Ответы [ 2 ]

0 голосов
/ 11 января 2019

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

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

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

0 голосов
/ 11 января 2019

Конечно, ответ да, у меня есть демо-код 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...