Diese Frage wurde viele Male auf SO gestellt (zum Beispiel here), aber es gibt noch keine echte Antwort.Wie kann die Python-Importgeschwindigkeit verbessert werden?
Ich schreibe ein kurzes Befehlszeilenprogramm, das Vorlagen rendert. Es wird mit einem Makefile frigged:
i = $(wildcard *.in)
o = $(patsubst %.in, %.out, $(t))
all: $(o)
%.out: %.in
./script.py -o [email protected] $<
In diesem Dummy Beispiel die Makefile analysiert jede .in
Datei eine .out
-Datei zu erzeugen. Es ist sehr praktisch für mich, make
zu verwenden, da ich viele andere Aktionen vor und nach diesem Skript triggern muss. Darüber hinaus möchte ich so gerne wie möglich bleiben: KISS.
So will ich mein Werkzeug einfach halten, dumm und verarbeiten jede Datei separat mit der Syntax
script -o out in
Mein Skript verwendet die folgenden:
#!/usr/bin/env python
from jinja2 import Template, nodes
from jinja2.ext import Extension
import hiyapyco
import argparse
import re
...
Das Problem, dass jeder ist Ausführung kostet mich etwa 1,2s (~ 60ms für die Verarbeitung und ~ 1140ms für die Import-Richtlinien):
$ time ./script.py -o foo.out foo.in
real 0m1.625s
user 0m0.452s
sys 0m1.185s
Die Gesamtausführung meines Makefile für 100 Dateien ist lächerlich: ~ 100 Dateien x 1.2s = 120s.
Dies ist keine Lösung, aber dies sollte die Lösung sein.
Welche Alternative kann ich verwenden?
EDIT
ich Python lieben, weil seine Syntax lesbar und Größe der Gemeinde. In diesem speziellen Fall (Befehlszeilentools) muss ich zugeben, dass Perl immer noch eine gute Alternative ist. Das gleiche in Perl geschriebene Skript (das auch eine interpretierte Sprache ist) ist etwa 12 mal schneller (unter Verwendung von Text::Xslate
).
Ich möchte nicht Perl in jedem Fall fördern Ich versuche nur, mein größtes Problem mit Python zu lösen: Es ist noch nicht eine geeignete Sprache für einfache Befehlszeilenwerkzeuge wegen der schlechten Importzeit.
Dies wäre eine bessere Passform auf [Code Review] (http://codereview.stackexchange.com/) Solange Sie ein voll funktionsfähiges Beispiel haben – muddyfish
@muddyfish Dies ist keine Code Review-Frage, da dies jedes in Python geschriebene CLI-Tool betreffen kann. – nowox
Keine Lösung für die Frage, aber wie wäre es, die Dinge für Anfänger parallel zu machen? Könnte dein Problem lösen. –