Должен ли я беспокоиться о переполнении трубы? - PullRequest
2 голосов
/ 26 января 2012

Есть два процесса (родительский и дочерний), взаимодействующие через канал. Родитель ожидает выхода своего потомка, а затем читает данные из конца чтения канала. Ребенок может производить довольно много продукции. Возможно ли, что канал потерпит неудачу из-за слишком большого количества непрочитанных данных в нем и потеряет часть вывода дочернего элемента?

Ответы [ 2 ]

3 голосов
/ 26 января 2012

Не нужно беспокоиться об этом: на стандартном ядре 2.6 или 3.0 размер буфера канала равен 64 КБ, поэтому первый процесс будет блокироваться при записи, если буфер заполнится.слишком мало, используйте buffer между двумя рабочими, который имеет настраиваемый объем памяти

1 голос
/ 05 сентября 2012

Да, если канал заполняет дочерние блоки процесса, и вы получаете тупик.

Эта проблема встречается и в python, см. Предупреждение Popen.wait () в [1], раздел 17.1.2; они использовали метод связи, чтобы избежать проблемы.

[1] http://docs.python.org/library/subprocess.html

...