Итак, предположим, что у меня есть два сценария: один для чтения xml-sax, другой должен обрабатывать результаты процесса синтаксического анализа.
Моя модель "игровой площадки" для синтаксического анализатора выглядит следующим образом:
import json
def generator():
n=0
while n < 100:
data_package = {n:"test", 101:"some more info"}
temp = json.dumps(data_package)
print(temp)
n = n + 1
generator()
Он имитирует создание dicts парсером, упаковывает их в строку дампа json для отправки в родительскую функцию.
Эта родительская функция порождает xml-reader как подпроцесс, должен принять диктовку и обработать информацию дальше.Пример игровой площадки:
import subprocess
child = subprocess.Popen(args=["python3", "playground-parser.py"], stdout=subprocess.PIPE,
stdin=subprocess.PIPE, stderr=subprocess.STDOUT)
То, что я сейчас упускаю, - это способ для синтаксического анализатора сказать родителю «эй, я закончил еще один data_package
, я жду, пока вы его обработаете», родитель дляполучите это сообщение, обработайте и откажитесь от data_package
и отправьте сообщение ребенку, в котором говорится, что он может продолжить и отправить еще один data_package
.
Что я думаю, что я получил, прочитав другие вопросы подпроцессаon stackoverflow:
- Мне нужно поместить stdout скрипта xml-parser в канал, чтобы родитель получал его, как только он стал доступен.
- Я могу использовать
Popen.communicate()
отправить текст ребенку?Я не могу обернуть голову вокруг того, что он на самом деле сообщает, поскольку он также используется для доступа к собранным выводам и ошибкам ребенка от родителя (outs, errors = child.communicate()
) - Существует
Popen.send_signal()
, документытолько сказать "Посылает сигнал ребенку".и продолжаю говорить об отправке сигналов выхода или завершения.
Я не могу собрать воедино, как я могу общаться от ребенка к родителю и заставить его фактически слушать и выполнять, когда он получает информациюот ребенка.
Заранее спасибо за любую помощь или указатель в правильном направлении!