Diferença de comportamento entre os.fork e multiprocessing.Process

Eu tenho este código:

import os

pid = os.fork()

if pid == 0:
    os.environ['HOME'] = "rep1"
    external_function()
else:
    os.environ['HOME'] = "rep2"
    external_function()

e este código:

from multiprocessing import Process, Pipe

def f(conn):
    os.environ['HOME'] = "rep1"
    external_function()
    conn.send(some_data)
    conn.close()

if __name__ == '__main__':
    os.environ['HOME'] = "rep2"
    external_function()
    parent_conn, child_conn = Pipe()
    p = Process(target=f, args=(child_conn,))
    p.start()
    print parent_conn.recv()
    p.join()

oexternal_function inicializa um programa externo criando os subdiretórios necessários no diretório encontrado na variável de ambienteHOME. Esta função faz esse trabalho apenas uma vez em cada processo.

Com o primeiro exemplo, que usaos.fork(), os diretórios são criados conforme o esperado. Mas com o segundo exemplo, que usamultiprocessing, apenas os diretórios emrep2 seja criado.

Por que o segundo exemplo não é criar diretórios nos doisrep1 erep2?

questionAnswers(2)

yourAnswerToTheQuestion