Ein grobes Verständnis von Python-Feuer und ein Memo

Der Artikel über Python-fire ist ein wenig aufgetaucht, also habe ich so getan, als würde ich ihn sehen.

Umgebung, in der der Betrieb bestätigt wurde

Eindrücke, wenn ich gerade das READ ME selbst gelesen habe

Ist es nicht gut mit "Argparse"?

Eigentlich vergleichen

Stellen Sie sich eine CLI mit dem einfachen Unterbefehl "add" vor, bei dem das Ergebnis des Hinzufügens zweier akzeptierter Argumente zurückgegeben wird. calc-1.py bleibt python-fire überlassen, und calc-2.py ersetzt es durch argparse.

calc-1.py


import fire

class Calcurator(object):
    def add(self, first, second):
        return int(first) + int(second)

if __name__ == '__main__':
    fire.Fire(Calcurator)

calc-2.py


import argparse

parser = argparse.ArgumentParser()
parser.add_argument('mode')
parser.add_argument('first')
parser.add_argument('second')

class Calcurator(object):
    def add(self, first, second):
        return int(first) + int(second)

if __name__ == '__main__':
    args = parser.parse_args()
    cli = Calcurator()
    print(getattr(cli, args.mode)(args.first, args.second))

Ich bin der Meinung, dass die Lesbarkeit erheblich verbessert wird. Wenn Sie einen kleinen CLI-Prozess schreiben, nimmt der Argument-Parser-Teil einen beträchtlichen Teil des Codes ein. Es kann daher hilfreich sein, wenn dies beseitigt wird.

Hilfeanzeige

Es scheint, dass (Unterbefehl) ---- hep die Argumentinformationen übernimmt.

calc-1.py


$ python calc-1.py add  -- --help
Type:        method
String form: <bound method Calcurator.add of <__main__.Calcurator object at 0x1036f8fd0>>
File:        ~/Dropbox (nijibox)/Applications/act/calc-1.py
Line:        5

Usage:       calc-1.py add FIRST SECOND
             calc-1.py add --first FIRST --second SECOND

calc-2.py


$ python calc-2.py -h
usage: calc-2.py [-h] mode first second

positional arguments:
  mode
  first
  second

optional arguments:
  -h, --help  show this help message and exit

Dateiinformationen sind etwas aufdringlich, scheinen jedoch als Verwendung eine Rolle zu spielen.

Verarbeitungszeit vergleichen

Wenn Sie ohne nachzudenken anrufen, ist calc-1.py offensichtlich langsamer.

$ time python calc-1.py add 12345 67890
80235
python calc-1.py add 12345 67890  0.60s user 0.29s system 30% cpu 2.945 total

$ time python calc-2.py add 12345 67890
80235
python calc-2.py add 12345 67890  0.07s user 0.07s system 77% cpu 0.179 total

Wenn Sie es einfach nur einmal vergleichen, sieht es so aus. Es scheint einen Unterschied von ungefähr 0,5 Sekunden zu geben.

Also habe ich versucht, eine solche Schleife zu machen.

loop.py


import sys
import subprocess

script = sys.argv[1]
count = int(sys.argv[2])

for _ in range(count):
    proc = subprocess.Popen('python {} add 12345 67890'.format(script).split(), stdout=None)
    proc.communicate()

loop.py


$ time python loop.py calc-1.py 10 > /dev/null
python loop.py calc-1.py 10 > /dev/null  4.29s user 1.20s system 97% cpu 5.651 total

$ time python loop.py calc-2.py 10 > /dev/null
python loop.py calc-2.py 10 > /dev/null  0.40s user 0.17s system 93% cpu 0.614 total

$ time python loop.py calc-1.py 100 > /dev/null
python loop.py calc-1.py 100 > /dev/null  45.53s user 12.45s system 88% cpu 1:05.32 total

$ time python loop.py calc-2.py 100 > /dev/null
python loop.py calc-2.py 100 > /dev/null  3.39s user 1.06s system 94% cpu 4.731 total

Ich habe versucht, es ein paar Mal zu wiederholen, aber im Durchschnitt scheint es, dass es ungefähr 0,4 bis 0,5 Sekunden länger dauert. In Anbetracht der Tatsache, dass die Hauptverarbeitung des Beispielcodes zu einfach ist, scheint es genügend Fälle zu geben, in denen es sich um einen Fehler im tatsächlichen Betrieb handelt.

Impressionen nach Lichtverifikation

Python-Feuer schön

Recommended Posts

Ein grobes Verständnis von Python-Feuer und ein Memo
[Python] Ein grobes Verständnis von Iterablen, Iteratoren und Generatoren
[Python] Ein grobes Verständnis des Protokollierungsmoduls
Eine grobe Zusammenfassung der Unterschiede zwischen Windows und Linux
Eine grobe Zusammenfassung der Geschichte des Betriebssystems
Memo der kollektiven Wissensprogrammierung verstehen
Eine kleine Überprüfung von Pandas 1.0 und Dask
Ein Memo mit Python2.7 und Python3 in CentOS
Verbinde viel Python oder und und
Memorandum zu Djangos QueryDict
Vollständiges Verständnis der objektorientierten Programmierung von Python
Ein Memo, das die Achsenspezifikation der Achse erklärt
Vollständiges Verständnis von Python-Threading und Multiprocessing
Ein Memo, das ein Tutorial zum Ausführen von Python auf Heroku erstellt hat
Maschinelles Lernen eines jungen Ingenieurs Teil 1
Vollständiges Verständnis der Konzepte von Bellmanford und Dyxtra
Ein Memorandum zum Studieren und Implementieren von Deep Learning
Ein Memo, das in einem Paket erstellt und in PyPI registriert wurde
Maschinelles Lernen eines jungen Ingenieurs Teil 2
Berücksichtigung der Stärken und Schwächen von Python
Memo mit Python mit HiveServer2 von EMR verbunden
Hinweise zur Verwendung von AIST Spacon ABCI
Ein Memo zum visuellen Verstehen der Achse von Pandas.Panel
Eine Geschichte über das Ausprobieren von pyenv, virtualenv und virtualenvwrapper
[PyTorch] Ein wenig Verständnis von CrossEntropyLoss mit mathematischen Formeln
Hinweise zur Installation von Chainer 1.5 für GPU unter Windows
Ein schneller Vergleich der Testbibliotheken von Python und node.js.
Erstellen Sie einen Stapel von Bildern und blasen Sie sie mit ImageDataGenerator auf
Asynchrone Verarbeitung von Python ~ Asynchron vollständig verstehen und warten ~
kanonischer Python-Ausdruck oder Match-Objekt-Memo
Erhalten Sie ein abstraktes Verständnis der Python-Module und -Pakete
elasticsearch_dsl Memorandum
Als Ergebnis der Montage und Abstimmung mit POH! Lite
Machen Sie die angegebene Anzahl von Sekunden zu Stunden, Minuten und Sekunden
Erkennen Sie mit Python Objekte einer bestimmten Farbe und Größe
Ein Hinweis zum Verhalten von bowtie2 bei mehreren Treffern
So entwickeln Sie in einer virtuellen Python-Umgebung [Memo]
Python: Erstellen Sie ein Wörterbuch aus einer Liste von Schlüsseln und Werten
Ein Memo, dass ich eine Grundfunktion in Python mit Wiederholung geschrieben habe