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
?