Почему Popen заставляет родительский процесс зависать на preexec_fn? - PullRequest
0 голосов
/ 03 мая 2020

Согласно Python 3,6 документов для Popen :

Если preexec_fn установлен в вызываемый объект, этот объект будет вызываться в дочернем процессе непосредственно перед дочерним процессом выполнен. (Только для POSIX)

Тогда почему родительский процесс зависает при выполнении функции preexec_fn? Если он выполняется в дочернем процессе, то родительский процесс должен быть в состоянии продолжить.

Вот небольшой пример программы, которая создает новый процесс "ls", перед которым он спит в течение 4 секунд. В идеале «достигнуто» должно быть напечатано сразу, но это не так. "достигнуто" напечатано через 4 секунды.

import os
import subprocess
import sys
import tempfile
import time


def sleep_a_little():
    time.sleep(4)


p = subprocess.Popen(["ls"], preexec_fn=sleep_a_little)
print("reached")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...