Поток демона сокета не останавливается

#python #python-3.x #multithreading #sockets

#python #python-3.x #Многопоточность #сокеты

Вопрос:

Я запускаю этот поток демона сокета на Python 3.x. Насколько я понимаю, поток демона должен завершаться немедленно при выходе из основного потока. Однако, когда я запускаю следующий код, поток демона остается в живых. Кто-нибудь, пожалуйста, объяснит это странное поведение?

 in_queue = queue.Queue()
out_queue = queue.Queue()

def server_handler():
        conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        conn.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
        conn.connect(("localhost", 18000))
        # set connection to non-blocking
        conn.settimeout(0)
        while True:
            try:
                msg = conn.recv(1024)
                if not msg:
                    break
                msg = pickle.loads(msg)
                in_queue.put(msg)
            except socket.error:
                while out_queue.qsize():
                    msg = out_queue.get_nowait()
                    pickled_msg = pickle.dumps(msg)
                    conn.sendall(pickled_msg)
                    # sleep
                    time.sleep(0.5)
# start thread here
threading.Thread(target = server_handler, args = (in_queue, out_queue,), daemon=True).start()
  

Комментарии:

1. Действительно, это должно немедленно завершиться. Вы запускаете его в python REPL? В этом случае основной поток ожидает вашего ввода. Если вы запустите это без REPL, процесс завершится, как только поток будет запущен

2. Я попытался запустить на Python IDE и VS Code, тот же результат.

3. попробуйте запустить python3 <name_of_file> в своей оболочке