У меня есть скрипт python, который запускает процесс с использованием многопроцессорного класса Process. Внутри этого процесса я запускаю поток с бесконечным циклом и моделирую исключение в основном потоке, выполняя exit(1). Я ожидал, что выход уничтожит процесс, но этого не происходит, и основной поток сообщает о нем как о живом.
Я пытался как вызвать исключение, так и вызвать выход, но ничего не работает. Я попытался дождаться завершения процесса, дождавшись is_alive и вызвав join. Но оба имеют одинаковое поведение.
from multiprocessing import Process
from threading import Thread
from time import sleep
def infinite_loop():
while True:
print("It's sleeping man")
sleep(1)
def start_infinite_thread():
run_thread = Thread(target=infinite_loop)
run_thread.start()
exit(1)
def test_multi():
x = Process(target=start_infinite_thread)
x.start()
sleep(5)
assert not x.is_alive()
Я ожидаю, что процесс не будет живым, но утверждение не выполняется.
Спасибо @Imperishable Night за ответ, установив поток как демон, который проходит тест. Код, который работает:
from multiprocessing import Process
from threading import Thread
from time import sleep
def infinite_loop():
while True:
print("It's sleeping man")
sleep(1)
def start_infinite_thread():
run_thread = Thread(target=infinite_loop)
run_thread.daemon = True
run_thread.start()
exit(1)
def test_multi():
x = Process(target=start_infinite_thread)
x.start()
sleep(1)
assert not x.is_alive()
exit()
не останавливает все потоки stackoverflow.com/questions/38804988/…