Завершение потока в библиотеке python - PullRequest
0 голосов
/ 08 мая 2020

Я пишу библиотеку python, которая будет использоваться в unix / windows. У меня проблема с завершением потока t1. Я попытался установить для него поток daemon, но поскольку библиотека иногда используется в IDE / приложениях, поток t1 не закроется, пока не закроется все приложение, что нежелательно. Теперь я пытаюсь изменить его на поток без демона и обработать завершение вручную.

def threadclick(id, stop):
    while(True):
        //do things repetitively //
        if stop():
           break

def main():
    global stop_thread
    stop_thread = False
    port_string1 = port_string
    t1 = threading.Thread(target=threadclick, args=(id, lambda : stop_thread))
    t1.start()

Мне нужно закрыть его, вызвав эту функцию:

def close_thread():
     global stop_thread
     stop_thread = True
     t1.join

конечно, это дает мне ошибку t1 is undefined, но я не уверен, как ее объявить глобально.

1 Ответ

1 голос
/ 08 мая 2020

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

Функция, которую вы использовали, показалась немного сложной.

Кроме того, вам, вероятно, лучше передать ссылку, чем полагаться на global.

Используйте это:

def threadclick(id, status):
    while not status['stop']:
        do_things()


status = dict(stop=False)


def main():
    status['stop'] = False
    t1 = threading.Thread(target=threadclick, args=(id, status))
    t1.start()
    wait_for_things_to_happen()
    close_thread(t1, status)


def close_thread(t1, status):
    status['stop'] = True
    t1.join()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...