Que é mais caro, comando shell ou manipula arquivo em python?

0

docker ps , que fornece a lista de execução de estivadores com <ID> <name> <port> etc.

Podemos obter as mesmas informações em /var/lib/docker/containers/<ID>/config.json . (Aqui o ID é o mesmo na ID do comando acima. Se houver mais IDs, haverá mais diretórios).

Eu preciso recuperar alguns valores usando o script python. Então, qual é a maneira mais eficiente de recuperar os valores, suprocess.check_output("<CMD>", shell=True) ou f=open(<FILE PATH>,'r') . Eu entendi, mesmo docker ps comando também usando esse arquivo para obter a informação.

Quando emitimos docker ps , a lista pode ser longa ou curta. Então, eu em geral, que é mais caro? e qual é eficiente? Obrigado!

    
por Veerendra 02.03.2016 / 12:44

1 resposta

1

Manipular o arquivo diretamente é o caminho a seguir.

Se você souber que docker ps também usa esse arquivo para obter as informações, basta processar o arquivo diretamente no Python.

O uso de subprocess para chamar docker custa um processo externo, e um processo externo é sempre caro.

Com um código Python simples:

def get_container_info(container_id):
    path = '/var/lib/docker/containers/{}/config.json'.format(container_id)
    with open(path, 'r') as f:
        d = json.load(f)
        return d['ID'], d['Name'], d['NetworkSettings']['Ports']

Em ipython shell interativo:

%timeit subprocess.check_output('docker ps', shell=True)
10 loops, best of 3: 56.8 ms per loop

%timeit get_container_info('<container_id>')
10000 loops, best of 3: 79.6 µs per loop
    
por 02.03.2016 / 13:05

Tags