2014-01-24 5 views
2

Как я понимаю, другой экземпляр Python запускается с многопроцессорной обработкой. Если да, тоУправление памятью с многопроцессорной обработкой Python

a. Является ли экземпляр Python запущен для каждого процесса многопроцессорности?

b. Если один из процессов работает, скажем, таблица базы данных в памяти и другой процесс работает над другой таблицей базы данных в памяти, как Python управляет распределением памяти для двух процессов?

c. Wrt b), является постоянным распределением памяти между вызовами, т.е. если первый процесс используется непрерывно, но второй процесс используется редко, является ли таблица внутренней памяти повторно созданной между вызовами процесса к ней?

+0

1. Что вы имеете в виду под таблицей памяти? 2. Является ли ваш вопрос конкретным только для определенной операционной системы или направленным внутрь процесса python? – User

+0

структура данных является «таблицей базы данных в памяти», может быть списком или словарем. вопрос не является специфическим для конкретной операционной системы. –

ответ

2

(а) да

(б) Python в значительной степени не управляет ею, операционная система делает

(с) Да, если второй процесс завершается, то его ресурсы освобождаются, независимо от того, персистентность первого процесса. В принципе вы можете использовать общие объекты, чтобы второй процесс мог использовать что-то, что будет перенести первый процесс. То, как это играет с конкретным примером «чего-то», являющегося таблицей базы данных, является другим.

Выполнение дополнительных процессов на Python с помощью multiprocessing очень похоже на выполнение дополнительных процессов Python (или в этом отношении на Java) с subprocess. Разница в том, что multiprocessing дает вам набор способов общения между процессами. Он не изменяет базовый жизненный цикл и обработку ресурсов процессами ОС.

+0

Ах! Если мы упростим и используем список (или словарь) в качестве обрабатываемых структур данных, то: Основной процесс Python (# 1) инициализирует список # 1 и список # 2. Определите список # 2 как общий объект. Процесс № 1 запускает процесс №2 для работы над списком # 2 и возвращает результат в процесс №1 и умирает. В следующий раз процесс №1 должен работать в списке # 2, он запускает (новый) процесс №2. Это что? –

+0

@ dbv: да, это должно работать, используя 'multiprocessing.Array' как тип общего объекта. Или, если процесс №2 не изменяет список # 2, просто вычисляет результат из него и возвращает его, тогда вам не нужна общая память вообще в правильной операционной системе - вы можете вместо этого использовать вилку, и ОС будет волшебным образом устроить эта память не изменяет ни процесс, ни модификацию. К сожалению, Windows не является надлежащей ОС. Я определяю «правильное» значение «обеспечивает fork» ;-) –

+0

потрясающий! процесс №2 изменяет список # 2, и поэтому разделяемая память - это путь. связанный с этим вопрос: концепция многопроцессорности Python заключается в том, чтобы использовать многоядерные процессоры cpu. процесс №2 будет выполняться с помощью другого ядра-процессора, чем процесс # 1. что произойдет, если машина будет одноядерным процессором? –

Смежные вопросы