Как отправить много строк в подпроцесс, используя 2 подпроцесса? - PullRequest
0 голосов
/ 13 мая 2019

Для эффективной индексации данных в Elasticsearch я отправляю содержимое через cURL, сначала я пишу командные файлы, а затем отправляю их через массовый API

Но я думаю, что могу избежать записи времени, отправив непосредственносодержимое подпроцесса, например:

jq = Popen("jq -c '. | {\"index\":{}}, . '" , shell=True, stdout=PIPE, stdin=PIPE)
curl = Popen("curl -S -H \"Content-type:application/x-ndjson\" -XPOST localhost:9200/myindex/_bulk/ —data-binary @-" , 
              shell=True, stdout=PIPE, stdin=jq.stdout)

for line in fic:
    entry = linetoentry(line) # make dict object 
    jq.stdin.write(json.dumps(entry).encode("utf-8"))

Но я получил erno 32 broken pipe, я прочитал, что это может быть потому, что второй подпроцесс не читает из первого, поэтому его "полный", этот способ работает длянебольшие входные данные, но не для больших, поэтому они согласованы

Как решить эту проблему?И это хороший способ ввести много много строк в процесс?

...