Ich sehe ein Problem, bei dem die Ausführung meines Python-Skripts manchmal länger dauern kann, um Bibliotheken zu importieren. Dies passiert, wenn ich das Skript kürzlich nicht ausgeführt habe oder wenn ich das Skript von einem anderen Server aus ausführe. Nach der ersten Verzögerung werden die Importzeiten viel schneller. Ich habe mich gefragt, was diesen langsamen Import verursacht und ob es einen Weg gibt, das zu verhindern?Was verursacht diese Verzögerung beim Importieren von Bibliotheken?
import time
s_time = time.time()
import sys,re,os,logging,signal
from argparse import ArgumentParser
print('Internal Import Time: {}'.format(time.time() - s_time))
s_time = time.time()
from backtrace import Backtrace,BacktraceSet
from report import Report
from core import Core
from burtapi import BurtAPI
print('External Import Time: {}'.format(time.time() - s_time))
In diesem Beispiel Backtrace, Bericht, Kern und burtapi sind Bibliotheken, die ich erstellt.
[[email protected] tool]$ ./tool --python
Internal Import Time: 2.8281359672546387
External Import Time: 13.053943157196045
Enter/Paste your content. Ctrl-D to save it.
^CYou pressed Ctrl+C!
[[email protected] tool]$ ./tool --python
Internal Import Time: 0.12279081344604492
External Import Time: 0.6948020458221436
Enter/Paste your content. Ctrl-D to save it.
^CYou pressed Ctrl+C!
ssh to different server (with same storage mount)
[[email protected] tool]$ ./tool --python
Internal Import Time: 3.0217390060424805
External Import Time: 13.151482105255127
Enter/Paste your content. Ctrl-D to save it.
^CYou pressed Ctrl+C!
[[email protected] tool]$
./tool ist ein Bash-Skript, das python3 /path/to/script.py
Es ist wahrscheinlich die Zeit, die Python benötigt, um vor dem ersten Lauf Byte-Code zu erzeugen (einige Bibliotheken zu kompilieren). Es ist auch, was gesehen werden kann, wenn Sie .pyc-Dateien löschen. Mehr dazu hier: https://stackoverflow.com/questions/2998215/if-python-is-interpreted-what-are-pyc-files Versuchen Sie, die .pyc-Dateien in den Ordnern zu löschen, in denen Sie die von Ihnen erstellten Bibliotheken abgelegt haben sehen, ob das Gleiche passiert. – ma3oun
@ ma3oun Wie bestimmt Python, wann es neu kompilieren muss? Der Byte-Code befindet sich in __pycache__, aber wenn ich mehrere Stunden warte oder den Server ändere, löst dies eine weitere Kompilierung aus, obwohl der Byte-Code bereits existiert. – Takkun