2017-06-08 142 views
1

Pythonスクリプトの実行時にライブラリのインポートに時間がかかることがあるという問題があります。これは、最近スクリプトを実行しなかった場合、または別のサーバーからスクリプトを実行した場合に発生します。最初の遅延後、インポート時間が大幅に短縮されます。この遅い輸入の原因は何ですか?それを防ぐ方法があるのでしょうか?この例のバックトレース、レポート、コア、およびburtapiでライブラリのインポート時にこの遅延の原因は何ですか?

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)) 

私が作成したライブラリです。

[[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がpython3 /path/to/script.py

+0

おそらく、最初の実行の前にPythonがバイトコードを生成する(いくつかのライブラリをコンパイルする)ために必要な時間です。また、.pycファイルを削除したときに表示されることもあります。これに関する詳細:https://stackoverflow.com/questions/2998215/if-python-is-interpreted-what-are-pyc-files 作成したライブラリを置くフォルダ内の.pycファイルを削除してください。同じことが起こるかどうかを見てください。 – ma3oun

+0

@ ma3oun Pythonはいつ再コンパイルする必要があるのか​​判断しますか?バイトコードは__pycache__にありますが、数時間待つかサーバーを変更すると、バイトコードがすでに存在していても別のコンパイルがトリガーされます。 – Takkun

答えて

1

を呼び出すbashスクリプトである複数の要因がここにありますが、3つの主要なものがあります

ファースト - モジュールをインポートするシステム上のモジュールを見つける必要があり、ディスクからデータを読み取る必要があります。

第2に、これらのモジュール内で変更が加えられた場合、インタープリタはそれらをバイトコンパイルする必要があります。

最後に、インタプリタが読み込みを開始するときに、モジュール自体に、実行が必要な命令/コードが含まれていて、多くの操作を実行する可能性があります。これらのモジュールの1つがデータベースに接続しているか、大きなハッシュテーブルをフィルタリングする必要があるとしましょう...

編集:私はこれらが前提であり、あなたのケースでは何が起こっているのかを言うのは難しいですがこれが起こっているケースです。

関連する問題