Непредсказуемое поведение при чтении из Stdin в потоке Daemon PythonPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Непредсказуемое поведение при чтении из Stdin в потоке Daemon Python

Сообщение Anonymous »

В документации Python говорится о потоках демонов: < /p>

Поток может быть помечен как «поток демона». Значимость этого флага состоит в том, что вся программа 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):

В попытке найти причину этого, я попробовал с (достаточно) функционально эквивалентным sys.stdin.readline () :

Код: Выделить всё

import threading
import sys
threading.Thread(target=sys.stdin.readline, daemon=True).start()
< /code>
Это работает так, как можно ожидать, и немедленно выходит и без ошибок при перенаправлении stdout. Both input
and sys.stdin.readline exit as expected, but the crash when redirecting stdout occurs only for 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»