old_stalin
@old_stalin

Закрывается ли в таком случае поток и невредно ли так делать?

Использую библиотеку threading
Сначала на ОЧЕНЬ абстрактном примере покажу как мой код выглядит:
import threading
def a():
    a = 5
    thread = threading.Thread(target=b, args=(a,), daemon=True)
    thread.start()
    return
def b(a):
    while True:
        a+=1
        if a == 1000000:
            print("Hello world")
            break
    return
a()

так вот, вопрос - закрывается ли в таком случае поток? И если нет, не вредно ли его так оставлять?
P.s пожалуйста не пишите ответы или комменты по типу: "Код ерунда" и тд. В своей проге я обязательно должен сначала запустить поток, а потом уже сделать return, никак иначе.
  • Вопрос задан
  • 133 просмотра
Решения вопроса 2
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вы плохо сформулировали вопрос.
В конкретно этом коде тред даже не запустится. Нигде не вызывается a().
Если в конце модуля с этим куском кода все же вызвать a(), то тут не будет ожидания выполнения треда. а значит успеет он выполнится или нет, и на сколько успеет - вопрос везения.
В любом случае при закрытии интерпретатора все ресурсы высвобождаются, а значит всё закроется.
Однако, полагаю, вопрос ваш немного глубже и сложнее, ведь вы сами себя обманули абстрактностью этого примера. При каких обстоятельствах у вас запускается этот тред и что происходит в коде после запуска вы не указали.
Ответ написан
old_stalin
@old_stalin Автор вопроса
Вот в исходниках:
def start_new_thread(function, args, kwargs=None): # real signature unknown; restored from __doc__
    """
    start_new_thread(function, args[, kwargs])
    (start_new() is an obsolete synonym)
    
    Start a new thread and return its identifier.  The thread will call the
    function with positional arguments from the tuple args and keyword arguments
    taken from the optional dictionary kwargs.  The thread exits when the
    function returns; the return value is ignored.  The thread will also exit
    when the function raises an unhandled exception; a stack trace will be
    printed unless the exception is SystemExit.
    """
    pass

По идее завершение или исключение в функции b() должно останавливать тред.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы