Поток может быть помечен как «поток демона». Значимость этого флага состоит в том, что вся программа Python выходит, когда остаются только потоки демонов.
Код: Выделить всё
import threading
threading.Thread(target=input, daemon=True).start()
Однако этот пример висит неопределенный срок (тестируемый на cpython 3.10.12. Linux).
Попытка перенаправить STDOUT (то есть python3 test.py>/dev/null ) не продолжает ждать ввода, но выходит через 1-2 секунды с инструкцией IoT (ядро сброшено) и следующее сообщение для Stderr:
и следующее сообщение:
и следующее
Код: Выделить всё
Fatal Python error: _enter_buffered_busy: could not acquire lock for at interpreter shutdown, possibly due to daemon threads
Python runtime state: finalizing (tstate=0x000060b51e205c10)
Current thread 0x00007ad136221080 (most recent call first):
Код: Выделить всё
import threading
import sys
threading.Thread(target=sys.stdin.readline, daemon=True).start()
< /code>
Это работает так, как можно ожидать, и немедленно выходит и без ошибок при перенаправлении stdout. Both input
With CPython 2.7.18, raw_input and sys.stdin.readline both cause the indefinite hang without the crash when redirecting stdout on the original machine, and both behave exactly as expected on Машина ARM. < /p>
Что здесь происходит? Я думаю, что здесь есть 4 основных вопроса:
[*] Почему я испытываю такое различное поведение между input () и sys.stdin.readline () ?
Почему я испытываю такое различное поведение между поведением Python? /> Почему перенаправление stdout запускает сбой? < /li>
< /ol>
Подробнее здесь: https://stackoverflow.com/questions/795 ... mon-thread