15.12.2022 Views

Python Eficaz

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

>>>

Finished in 0.117 seconds

Nota

Se esses processos forem iniciados em sequência, o tempo de espera seria de

aproximadamente 1 segundo, e não os décimos de segundo que medimos no

exemplo.

Podemos também desviar dados do programa em Python para um subprocesso e

depois obter sua saída – em inglês, o termo usado para isso é pipe. Isso permite

utilizar outros programas para fazer trabalho em paralelo. Por exemplo, digamos

que se queira usar a ferramenta de linha de comando openssl para criptografar

dados. É muito fácil iniciar o processo-filho com argumentos de linha de

comando e pipes de I/O.

def run_openssl(data):

env = os.environ.copy()

env['password'] = b'\xe24U\n\xd0Ql3S\x11'

proc = subprocess.Popen(

['openssl', 'enc', '-des3', '-pass', 'env:password'],

env=env,

stdin=subprocess.PIPE,

stdout=subprocess.PIPE)

proc.stdin.write(data)

proc.stdin.flush() # Garante que o filho receba algum dado na entrada

return proc

No exemplo de código a seguir, desviamos (com pipe) bytes aleatórios para

dentro da função de criptografia, mas na prática esses dados deveriam vir de um

campo digitado pelo usuário, ou um manipulador de arquivos (handle), ou um

socket de rede, ou qualquer outra fonte de dados do mundo real:

procs = []

for _ in range(3):

data = os.urandom(10)

proc = run_openssl(data)

procs.append(proc)

Os processos-filho rodam em paralelo e consomem os dados de entrada. No

www.full-ebook.com

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!