Объединение подпроцесса и многопроцессорного модуля

Я создаю небольшой конвейер для обработки большого количества данных, и я решил использовать python для вызова программы с использованием нескольких ядер.

Итак, вот мои вопросы:

1) Программа выводит очень большой текстовый файл. Я только хочу сохранить вывод в новый файл (поэтому не сохраняйте строку как объект Python), каков наилучший способ сделать это с помощью модуля подпроцесса?

2) Я хочу вызывать программу много раз параллельно, используя многопроцессорный модуль. Обычно я просто иду простым путем и использую функцию Pool.map, не помешает ли это модулю подпроцесса?

Заранее спасибо!

1 ответ

Решение

1) Программа выводит очень большой текстовый файл. Я только хочу сохранить вывод в новый файл (поэтому не сохраняйте строку как объект Python), каков наилучший способ сделать это с помощью модуля подпроцесса?

Если вы посмотрите на документацию, допустимые значения для stdout являются:

PIPE, существующий файловый дескриптор (положительное целое число), существующий файловый объект и None.

Так:

with open('new_file.txt', 'w') as outfile:
    subprocess.call(['program', 'arg'], stdout=outfile)

2) Я хочу вызывать программу много раз параллельно, используя многопроцессорный модуль. Обычно я просто иду простым путем и использую функцию Pool.map, не помешает ли это модулю подпроцесса?

Нет, если вы не делаете некоторые странные вещи.

multiprocessing.Pool отслеживает, какие процессы он создал, и не будет пытаться управлять другими дочерними процессами, которые могут быть созданы в других местах, поэтому очевидная вещь, о которой вы беспокоитесь, не проблема.

Наиболее распространенная проблема, которую я видел, это использование Popen создавать дочерние процессы, которые вы никогда не пожнете. Вам часто это сойдет с рук в приложении без multiprocessing, но как только вы сделаете Popen- и утечка в задаче пула, вы перестаете сойти с рук. (Это на самом деле ничего multiprocessing или Python; просто процессы внуков не совпадают с дочерними процессами.)

Другие вопросы по тегам