Почему процесс не прекращается? - PullRequest
0 голосов
/ 06 мая 2020

Я новичок в многопоточности. Читая «Программирование Python» Марка Лутца, я застрял на этой строке

, обратите внимание, что из-за его простодушных бесконечных циклов по крайней мере один из его потоков не может d ie на Ctrl- C на Windows вам может потребоваться использовать диспетчер задач, чтобы убить процесс python .exe, запускающий этот скрипт, или закрыть это окно для выхода

Но, согласно моим небольшим знаниям о потоки все потоки завершаются при выходе из основного потока. Так почему бы не в этом коде?

# anonymous pipes and threads, not process; this version works on Windows


import os
import time
import threading


def child(pipe_out):
    try:
        zzz = 0
        while True:
            time.sleep(zzz)
            msg = ('Spam %03d\n' % zzz).encode()
            os.write(pipe_out, msg)
            zzz = (zzz + 1) % 5
    except KeyboardInterrupt:
            print("Child exiting")


def parent(pipe_in):
    try:
        while True:
            line = os.read(pipe_in, 32)
            print('Parent %d got [%s] at %s' % (os.getpid(), line, time.time()))
    except KeyboardInterrupt:
        print('Parent Exiting')


pipe_in, pipe_out = os.pipe()
threading.Thread(target=child, args=(pipe_out, )).start()
parent(pipe_in)
print("main thread exiting")

1 Ответ

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

Процесс Python завершится, когда больше не будет запущенных недемонических потоков. Если вы передадите аргумент daemon=True команде threading.Thread, вы заметите другое поведение в своей программе.

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

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