multiprocessing.Process
, используемый в режиме fork
, не нужно будет использовать привязанный метод (что потребовало бы выбора экземпляра), поэтому будут оплачены минимальные первоначальные затраты. Нет никакой задокументированной гарантии этого AFAICT, но реализация CPython с использованием fork не делает этого, и у них нет причин для этого, поэтому я не вижу, чтобы они убирали эту функцию, когда нечего было получить это.
Тем не менее, природа дизайна подсчета ссылок CPython (с циклическим сборщиком мусора для обработки сбоев подсчета ссылок) такова, что заголовок объекта для всех объектов Python будет соприкасаться с перерывами, что приведет к тому, что любая страница, содержащая небольшой объект, который нужно скопировать, поэтому, хотя работа ЦП, связанная с фактическим выполнением цикла сериализации / десериализации, не произойдет, длительное выполнение Process
обычно приводит к разделению нескольких страниц с родительским процессом.
Также обратите внимание, что multiprocessing.Process
в режиме fork
- единственный раз, когда вы извлекаете из этого пользу. Методы запуска forkserver
и spawn
не получают копии родительских страниц при копировании при записи, и поэтому не могут принести пользу, и такие методы multiprocessing.Pool
, как apply
/ apply_async
и различные map
- например, функции всегда выбирают как вызываемую функцию, так и ее аргументы (поскольку рабочие процессы не знают, какие задачи им будет предложено выполнить, когда они разветвлены, а объекты могли измениться после -привет, так что он всегда их переизлучает).