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.

paralelo. É importante entender como utilizar o Python da melhor maneira

possível nessas duas situações sutilmente diferentes.

Item 36: Use subprocess para gerenciar processosfilho

O Python possui bibliotecas já testadas e aprovadas em campo para executar e

administrar processos-filho, o que o torna uma senhora linguagem para “colar”

outras ferramentas, como utilitários de linha de comando, em um mesmo

sistema. Quando os scripts em shell existentes começam a ficar muito

complicados, e eles ficam mesmo com o passar do tempo, reescrevê-los como

um programa em Python é a escolha natural para melhorar a legibilidade e

facilidade de manutenção.

Os processos-filho iniciados pelo Python são capazes de rodar em paralelo,

permitindo que se use o Python para consumir todos os núcleos de CPU de sua

máquina e maximizar o volume de trabalho de seus programas. Embora o

Python esteja vinculado a apenas uma CPU (consulte o Item 37: “Use threads

para bloquear I/O e evitar paralelismo”), é fácil usar o Python para iniciar e

coordenar processos que usam intensivamente todos os núcleos.

O Python já teve muitas maneiras de executar subprocessos ao longo de sua

vida, incluindo os comandos popen, popen2 e os.exec*. Com o Python de hoje, a

melhor maneira, e também a mais simples, de gerenciar processos-filho é usando

o módulo nativo subprocess.

É muito simples executar um processo-filho com o subprocess. No exemplo de

código a seguir, o construtor Popen inicia o processo. O método communicate lê

a saída do processo-filho e espera que ele termine.

proc = subprocess.Popen(

['echo', 'Hello from the child!'],

stdout=subprocess.PIPE)

out, err = proc.communicate()

print(out.decode('utf-8'))

>>>

Hello from the child!

Os processos-filho rodam de forma independente de seu processo-pai, que é o

www.full-ebook.com

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

Saved successfully!

Ooh no, something went wrong!