1) Программа выводит очень большой текстовый файл. Я только хочу сохранить вывод в новый файл (так что не сохранять строку как объект python), что лучший способ сделать это с помощью модуля подпроцесса?
Если посмотреть на the documentation, допустимые значения для 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, это просто, что процессы внуков не совпадают с дочерними процессами.)
Спасибо за ответ. Есть ли какая-то конкретная причина для использования 'with open'? – Misconstruction
@Misconstruction: вы должны почти всегда использовать 'with', когда используете' open'. В противном случае вам понадобится другой способ гарантировать, что 'outfile.close()' будет вызван независимо от того, что даже при исключении или раннем возврате или что-то еще. (Особенно в файлах с возможностью записи, где невозможно закрыть файл, это может означать, что последние несколько строк никогда не попадают на диск.) В этом конкретном случае ... нет никакого риска, но даже здесь он сохраняет несколько нажатий клавиш, а это означает, что я не делаю «Должен ли я думать о том, есть ли риск. – abarnert