Как заставить родительскую функцию выполнять что-то каждый раз, когда она получает данные из своего подпроцесса? - PullRequest
0 голосов
/ 04 декабря 2018

Итак, предположим, что у меня есть два сценария: один для чтения 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(), документытолько сказать "Посылает сигнал ребенку".и продолжаю говорить об отправке сигналов выхода или завершения.

Я не могу собрать воедино, как я могу общаться от ребенка к родителю и заставить его фактически слушать и выполнять, когда он получает информациюот ребенка.

Заранее спасибо за любую помощь или указатель в правильном направлении!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...