Способ остановить поток, когда (под) программа закрыта - PullRequest
0 голосов
/ 03 апреля 2020

Я использую программу python, которая позволяет использовать и создавать расширения. Когда я вызываю мое расширение, код будет выполняться до его завершения, после чего расширение закроется и вернется к основной программе. Но у меня есть несколько расширений, которые должны делать еще кое-что в фоновом режиме, поэтому я запускаю поток.

Я знаю, как остановить потоки, но не после того, как мои расширения закрыты.

Решение, которое я нашел, состоит в том, чтобы записать флаги в файл и загрузить их, когда я передаю логическое значение из основной программы с помощью kwargs.

class TestThread():
def __init__(self, **kwargs):
    super(TestThread, self).__init__(**kwargs)
    start_thread = kwargs.get("start_thread", False)
    do_something_else = kwargs.get("do_something_else", False)
    stop_thread = kwargs.get("stop_thread", False)

    if stop_thread:  
        self.write_state("stop")
        while self.load_state() != "stopped": # wait until it is stopped
            time.sleep(0.1)

    if start_thread:
        self.write_state("run")
        Thread(target=self.myThread).start()

    if do_something_else:
        # Doing something else


def myThread(self):
    while self.load_state() == "run":
        # do_some_stuff

    self.write_state("stopped")


def loadState(self):
    return pickle.load(open("state.p", "rb"))

def writeState(self, state):
    pickle.dump(state, open("state.p", "wb"))
    return True

Единственное другое решение, которое у меня было Имеется в виду использование сокета и отправка состояния потоку. Но я думаю, что должен быть более pythoni c способ выполнить sh this.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...